суммирование значений Oracle PIVOT - PullRequest
0 голосов
/ 14 октября 2019
Запрос

ниже работает, чтобы свести данные в течение следующих 18 месяцев, но добавить итог в конце любым простым способом?

select  *  from 
 ( select A,B 
 months_between(trunc(start_Dt, 'MM'), trunc(sysdate,'MM' )  ) as month_offset,
  qty from total_Table
 where trunc(start_Dt) >= (SELECT trunc(sysdate) - (to_number(to_char(sysdate,'DD')) - 1) FROM dual  ))
  pivot(sum( qty) as sum_quantity for
  month_offset in ( 1,2, 3, 4 )
  order by A, B;

Результат

A B    1    2   3   4   total
A1 B1  100 200 300 400  1000 
A2 B2   50 100 150 200   500 

 select  *  from 
 ( select A,B 
 months_between(trunc(start_Dt, 'MM'), trunc(sysdate,'MM' )  ) as month_offset,
  qty from total_Table
 where trunc(start_Dt) >= (SELECT trunc(sysdate) - (to_number(to_char(sysdate,'DD')) - 1) FROM dual  ))
  pivot(sum( qty) as sum_quantity for
  month_offset in ( 1,2, 3, 4 )
  order by A, B;

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете использовать условное агрегирование следующим образом, очевидно, что pivot требует больше усилий, чем условное агрегирование.

Select A, B,
SUM(CASE WHEN month_offset = 1 THEN QTY END) AS "1",
SUM(CASE WHEN month_offset = 2 THEN QTY END) AS "2",
SUM(CASE WHEN month_offset = 3 THEN QTY END) AS "3",
SUM(CASE WHEN month_offset = 4 THEN QTY END) AS "4",
SUM(QTY) AS TOTAL
FROM
(select A,B, 
 months_between(trunc(start_Dt, 'MM'), trunc(sysdate,'MM' )  ) as month_offset,
  qty from total_Table
 where trunc(start_Dt) >= trunc(sysdate) - (to_number(to_char(sysdate,'DD')) - 1)
) 
WHERE month_offset IN (1,2,3,4)
  Group by A, B;

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...