Oracle SQL - Поворот нескольких строк в один столбец - PullRequest
2 голосов
/ 19 марта 2020

Всем профессионалам Oracle SQL, пожалуйста, я пытаюсь использовать сводную диаграмму для преобразования нескольких строк в один столбец. Я пытался просмотреть прошлые публикации, но не смог найти ничего, связанного с тем, что я хочу сделать, или, может быть, я просто не знаю, как правильно его искать. Я хочу взять строки HAND, PECO, CHEP и превратить их в 1 столбец с именем EXTRA, оставив STORAGE и RENEWAL в качестве отдельных столбцов. Я в тупике, любая помощь будет принята с благодарностью. Заранее спасибо!

Мой текущий sql,

select * from (
select company, customer, rev_code, sum(rev_amt) amt
from revenue_anal
where company='01'
and rev_date between to_date('20\01\01','YY\MM\DD') and sysdate
group by company, customer, rev_code
order by 2,1 )
pivot (sum(amt) for rev_code in ('HAND', 'PECO', 'CHEP', 'STORAGE', 'RENEWAL'))

Query, 

COMPANY | CUSTOMER  | REV_CODE  | REV_AMT
---------------------------------------------------
01  | 101962    | HAND      | 253.377
01  | 101962    | PECO      | 60
01  | 101962    | CHEP      | 1632
01  | 101962    | STORAGE   | 2700
01  | 101962    | RENEWAL   | 60
---------------------------------------------------

Output with my current query,

COMPANY | CUSTOMER  | HAND      | PECO  | CHEP  | STORAGE   | RENEWAL
--------------------------------------------------------------------------
01      | 101962    | 253.377   | 60    | 1632  | 2700      | 60


Trying to get the output to show as 

COMPANY | CUSTOMER  | EXTRA     | STORAGE   | RENEWAL
------------------------------------------------------------------
01      | 101962    | 1945.377  | 2700      | 60

Спасибо, что нашли время помочь.

1 Ответ

1 голос
/ 19 марта 2020

Вместо select * from ( в самом начале вашего запроса напишите

select company, customer, hand + peco + chep as extra, storage, renewal
from   (
.........

Если вы ожидаете, что любой из HAND, PECO или CHEP может быть NULL, переносите каждый из них индивидуально в пределах NVL(...., 0) (если, на самом деле, NULL следует интерпретировать как ноль; в противном случае оставьте как есть, и результатом будет NULL, если хотя бы один из терминов будет NULL) .

...