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