Возврат нулевых значений при вычитании двух значений - PullRequest
0 голосов
/ 17 октября 2019

Я выполняю запрос, чтобы получить сумму для конкретного клиента за два периода времени (июль и август). Затем вычесть два, чтобы получить разницу. Тем не менее, я получаю нулевые значения, когда вычитаю, даже если для этого клиента существуют значения как для июля, так и для августа.

Эта часть оператора select возвращает нулевое значение, даже если я знаю, что значения / числа существуют. 'AUG.amount - JUL.amount как Final_Result'

Я попытался запустить таблицы Jul и Aug по отдельности, и они возвращают сумму / сумму для AH.

SELECT AUG.party_name, AUG.amount - JUL.amount as Final_Result

FROM (select cl.party_name, sum(cl.amount)/1000 as amount
from CLIENT_PROFIT CL
where to_char(trade_date,'YYYYMMDD') between '20190801' and '20190830'
AND cl.party_name = 'AH'
group by cl.party_name
) AUG

LEFT JOIN

(select cl.party_name, sum(cl.amount)/1000 as amount
from CLIENT_PROFIT CL
where to_char(trade_date,'YYYYMMDD') between '20190701' and '20190731'
AND cl.party_name = 'AH'
group by cl.party_name) JUL

ON AUG.party_name = JUL.party_name

group by AUG.party_name

order by Final_Result DESC

ожидаемый результат долженпоказать разницу между августом и июлем для AH

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать Conditional Aggregation без выражения group by, так как у вас есть только одно имя участника:

select 'AH' as party_name, 
       sum(case when to_char(trade_date,'YYYYMM')='201908' then cl.amount/1000 end) - 
       sum(case when to_char(trade_date,'YYYYMM')='201907' then cl.amount/1000 end)
       as Final_Result
  from CLIENT_PROFIT CL
 where cl.party_name = 'AH'
2 голосов
/ 17 октября 2019

Вы можете получить его напрямую, используя следующее: Редактирование запроса для использования усечения по месяцам.

select cl.party_name, 
(sum(case when trunc(trade_date,'month') = date '2019-08-01' then cl.amount end) 
- sum(case when trunc(trade_date,'month') = date '2019-07-01' then cl.amount end) )  /1000 as amount
from CLIENT_PROFIT CL
where trunc(trade_date) between date '2019-07-01' and date '2019-08-31'
AND cl.party_name = 'AH'
group by cl.party_name;

Кроме того, вы забыли включить 31-й авг 2019 в ваш запрос.

Cheers! !

...