Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

русские поля?


Наверх

Титульная страница Поиск, карта сайта Написать письмо