![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IB/FB - Запрос по подзапросу с группировкой [D7, IB6.x, FB]
seregin © (2003-06-26 14:34:00)Привет, Мастера!!!
Есть таблица: Дебет, Кредит, Сумма (комбинации повторяются). Нужно сделать группировку Счет, Оборот_По_Дебету, Оборот_По_Кредиту (т.е. уникальность по Счету). Как сделать это однимзапросом?
Пацаны-ораклисты посоветовали так:
select Счет, sum(Дебет_Сумма), sum(Кредит_Сумма) from
(select Дебет as Счет, sum(Сумма) as Дебет_Сумма, 0 as Кредит_Сумма
from Проводки group by Дебет
union
select Кредит as Счет, sum(Сумма) as 0 as Дебет_Счет, sum(Сумма) as Кредит_Сумма
from Проводки group by Кредит)
group by Счет
Firebird на такую конструкцию ругается сразу после первого from...
может можно по-другому? на клиенте из двух запросов я могу и сам...
Sandman25 (2003-06-26 16:12:00) [1]Можно еще сделать вот так.
select счет, sum(сумма), 0
from проводки
where дебет = счет
group by 1,3
union all
select счет, 0, sum(сумма)
from проводки
where кредит = счет
group by 1,3
Не совсем то, что нужно, но если дописать "order by счет", то на клиенте можно будет слить суммы в одну строку.
seregin (2003-06-26 15:54:00) [2]> Sandman25
да, замечательно...
но ОЧЕНЬ медленно!!!!!
а если учесть, что полей гораздо больше (аналитика), то вообще нереально...
на клиенте быстрее....
ладно, всем спасибо...
Sandman25 (2003-06-26 15:21:00) [3]select счет,
(select sum(сумма)
from проводки
where дебет = t.счет
),
(select sum(сумма)
from проводки
where кредит = t.счет
)
from счета t
Но работать будет очень медленно.
Лучше сделать 2 запроса с Group By и Union.
seregin (2003-06-26 14:53:00) [4]> Соловьев
нельзя!!!
уже получал...
Соловьев (2003-06-26 14:50:00) [5]
> хранимую процедуру нельзя - разработчик поимеет :(
почему примеет? ХП ничего плохого с БД не сделает....(если все правильно :)
seregin (2003-06-26 14:48:00) [6]> Johnmen
хранимую процедуру нельзя - разработчик поимеет :(
seregin (2003-06-26 14:47:00) [7]>Zacho
Дебет - счет-дебет
Кредит - счет-кредит
Сумма - числовое поле, хранящее сумму проводки
20/01 |60/01 | 165.00
20/01 |08/03 | 1655.50
и т.д.
пойдет?
Johnmen (2003-06-26 14:45:00) [8]Запрос из запроса, естественно, не пойдет.
Стандартное несложное решение - хранимая процедура.
seregin (2003-06-26 14:44:00) [9]> Соловьев
select Счет, sum(Дебет_Сумма), sum(Кредит_Сумма) from
((select Дебет as Счет, sum(Сумма) as Дебет_Сумма, 0 as Кредит_Сумма
from Проводки group by Дебет)
union
(select Кредит as Счет, sum(Сумма) as 0 as Дебет_Счет, sum(Сумма) as Кредит_Сумма
from Проводки group by Кредит))
group by Счет
я в документации не нашел "select from select"...
по-другому нельзя?
Zacho (2003-06-26 14:41:00) [10]
> seregin (26.06.03 14:34)
Структуру таблицы более подробно опиши, а то из этого дикого запроса ничего не понятно.
Соловьев (2003-06-26 14:41:00) [11]скобка где?
select fom select не канает...
seregin (2003-06-26 14:40:00) [12]> Соловьев
перед union
Соловьев (2003-06-26 14:39:00) [13]
> (select Дебет as Счет, sum(Сумма) as Дебет_Сумма, 0 as Кредит_Сумма
>
а где этот select заканчивается?
seregin (2003-06-26 14:38:00) [14]> Соловьев
нет, я просто так написал...
Соловьев (2003-06-26 14:37:00) [15]русские поля?