У меня есть следующий запрос:Суммируя сумму из двух отдельных таблиц
select tb1.accountnum, to_char(tb3.month, 'MON, YYYY'),
sum(tb3.amt_due)
from db_table1 tb1, db_table2 tb2, db_table3 tb3
where tb1.acctnum = tb2.acctnum and
tb2.acctcode = tb3.acctcode and
tb3.type_id = 10 and
tb1.status = 'YES'
group by tb1.accountnum, (tb3.month, 'MON, YYYY'),
having sum(tb3.amt_due) < 0;
Этот запрос будет суммировать суммы долга за каждый месяц отдельно, и если отрицательный, вернуть номер счета. Например:
accountnum | Month | Amt_Due
---------- | --------- | ---------
1 | Jan | 15
---------- | --------- | ---------
1 | Jan | -20
---------- | --------- | ---------
1 | Mar | 3
---------- | --------- | ---------
2 | Aug | 13
---------- | --------- | ---------
2 | Dec | -25
---------- | --------- | ---------
2 | Dec | 40
---------- | --------- | ---------
Даст результат:
accountnum | Month | Amt_Due
---------- | --------- | ---------
1 | Jan | -5
---------- | --------- | ---------
теперь я хочу, чтобы добавить дополнительную таблицу (Tb4) и просуммировать расходы, как мы только что делали выше. Рассмотрим эти строки в новой таблице (tb4).
accountnum | Month | misc_charge
---------- | --------- | ---------
1 | Jan | -45
---------- | --------- | ---------
1 | Jan | 25
---------- | --------- | ---------
2 | Sep | -7
---------- | --------- | ---------
Суммируя обвинения даст нам результат:
accountnum | Month | misc_charge
---------- | --------- | ---------
1 | Jan | -20
---------- | --------- | ---------
2 | Sep | -7
---------- | --------- | ---------
Теперь я хочу подвести итоги нашего первого запроса к результатам второго. Итак:
accountnum | Month | Amt_Due
---------- | --------- | ---------
1 | Jan | -5
---------- | --------- | ---------
суммируется с
accountnum | Month | misc_charge
---------- | --------- | ---------
1 | Jan | -20
---------- | --------- | ---------
2 | Sep | -7
---------- | --------- | ---------
дает окончательный результат:
accountnum | Month | sum(sum(tb3.amt_due) + sum(tb4.misc_charge))
---------- | --------- | ---------
1 | Jan | -25
---------- | --------- | ---------
2 | Sep | -7
---------- | --------- | ---------
Я изменил свой первоначальный запрос, чтобы включить Tb4, но Oracle дает мне ошибку: ORA -00935: групповая функция находится слишком глубоко
select tb1.accountnum, to_char(tb3.month, 'MON, YYYY'),
to_char(tb4.month, 'MON, YYY'),
sum(sum(tb3.amt_due) + sum(tb4.misc_charge))
from db_table1 tb1, db_table2 tb2, db_table3 tb3, db_table4 tb4
where tb1.acctnum = tb2.acctnum and
tb2.acctcode = tb3.acctcode and
tb3.acctcode = tb4.acctcode and
tb3.type_id = 10 and
tb1.status = 'YES'
group by tb1.accountnum, to_char(tb3.month, 'MON, YYYY'),
to_char(tb4.month, 'MON, YYY')
having sum(sum(tb3.amt_due) + sum(tb4.misc_charge)) < 0;
Может кто-нибудь, пожалуйста, помогите мне с синтаксисом включения финального стола?
Спасибо!
Почему бы не поделиться тем, что вы пробовали? – BobC
Добавлены изменения, которые я пробовал! – ComputersAreNeat
Я не могу выполнить весь процесс (слишком поздно в день), но: если вы группируете по счету и месяцу и выбираете сумму сумм отдельно в двух наборах строк (будь то базовые таблицы, представления, подзапросы, результат объединений и т. д.) - почему вы не можете сделать UNION ALL из наборов строк, * только соответствующие столбцы *, ПЕРЕД каждой группой по и суммой, а THEN применить функцию группировки и агрегации к результату UNION ALL? Это было бы чище (проще писать и следить за будущими разработчиками, поддерживая код) и более эффективно. – mathguy