pl sql запрос (суммирование значений)

Написал такой запрос:

select distinct tl. packno, tc.id, tc.name as atmnumb, tl.amount, sum(tah.inccash) as amountin, sum(tah.deccash) as amountout, ta.account as atmacc, 
DECODE(ta.currency, 840, 'USD', 398, 'KZT') as valuta, to_char (tl.time, 'dd.mm.yyyy') as incdate, to_char (tl.time, 'hh24:mi.ss')  as inctime, tl.termname, tl.type, tl.trancode
from TABLE_YSTROISTVA tc, TABLE_LOG tl, TABLE_CASSETS_1 tah, TABLE_ACC ta 
where tc.type=1 and tc.class=1 and tc.id=tl.origid and tl.id=tah.id and ta.id=tc.id and tah.deccash != '0.000'
and trunc(tl.time) = trunc(sysdate-1) 
and tl.trancode in (91,98) and tl.packno between
           to_number(to_char(trunc(sysdate-1) - 1, 'YY') || to_char(trunc(sysdate-1) - 1, 'MM') ||
                     to_char(trunc(sysdate-1) - 1, 'DD') || '001') and
           to_number(to_char(trunc(sysdate-1) + 1, 'YY') || to_char(trunc(sysdate-1) + 1, 'MM') ||
                     to_char(trunc(sysdate-1) + 1, 'DD') || '005') and tl.type = 999 and tc.class=tl.termclass
group by tl.termname, tc.id, tl.amount, tc.name, tl.termdate, tl.type, tl.packno, tl.time, tl.trancode, tah.inccash, tah.deccash, ta.account, ta.currency
UNION
select distinct tl. packno, tc.id, tc.name as atmnumb, tl.amount, sum(tah.inccash) as amountin, sum(tah.deccash) as amountout, ta.account as atmacc, 
DECODE(ta.currency, 840, 'USD', 398, 'KZT') as valuta, to_char (tl.time, 'dd.mm.yyyy') as incdate, to_char (tl.time, 'hh24:mi.ss')  as inctime, tl.termname, tl.type, tl.trancode
from TABLE_YSTROISTVA tc, TABLE_LOG tl, TABLE_CASSETS_2 tah, TABLE_ACC ta
where tc.type=1 and tc.class=1 and tc.id=tl.origid and tl.id=tah.id and ta.id=tc.id and tah.deccash != '0.000'
and trunc(tl.time) = trunc(sysdate-1)  
and tl.trancode in (91,98) and tl.packno between
           to_number(to_char(trunc(sysdate-1) - 1, 'YY') || to_char(trunc(sysdate-1) - 1, 'MM') ||
                     to_char(trunc(sysdate-1) - 1, 'DD') || '001') and
           to_number(to_char(trunc(sysdate-1) + 1, 'YY') || to_char(trunc(sysdate-1) + 1, 'MM') ||
                     to_char(trunc(sysdate-1) + 1, 'DD') || '005') and tl.type = 999 and tc.class=tl.termclass
group by tl.termname, tc.id, tl.amount, tc.name, tl.termdate, tl.type, tl.packno, tl.time, tl.trancode, tah.inccash, tah.deccash, ta.account, ta.currency

Результат такой: [1]: https://i.stack.imgur.com/0v2lp.jpg

А должно выйти так: [2]: https://i.stack.imgur.com/BCMjl.jpg

Смысл в том, что в полученном результате у меня с таблиц (TABLE_CASSETS_1/TABLE_CASSETS_2) берутся значения (tah.inccash, tah.deccash) и я не могу их корректно суммировать по причине того, что в некоторых устройствах присутствуют 2 валюты и значение дублируются при выводе и счетов устрйоств (таблица TABLE_ACC). Сумма по валютам должна быть раздельна, а также не должны выводиться куча счетов устройств. как в примере [2]: https://i.stack.imgur.com/BCMjl.jpg.

В примере [1]: https://i.stack.imgur.com/0v2lp.jpg мультивалютное устройство - это АТМ 700029. В примере [2]: https://i.stack.imgur.com/BCMjl.jpg. мультивалютное устройство - это АТМ 700062.

Извиняюсь, не совсем правильно привел второй (нужный) результат. Запрос должен вывести следующее:3: https://i.stack.imgur.com/a1SMF.jpg

То есть в корректном исходном файле поля Сумма загрузки и Сумма разгрузки есть результаты сложения полей из файла 1: https://i.stack.imgur.com/BCMjl.jpg, только без дублирующих значений в соответствующих полях. А также поле # счета АТМ не повторяется для АТМ 700027 и АТМ 700029


Ответы (0 шт):