【问题标题】:Oracle SQL - Pivoting multiple rows into single columnOracle SQL - 将多行转换为单列
【发布时间】:2020-07-01 00:20:22
【问题描述】:

对于所有 Oracle SQL 专业人士,我正在尝试使用数据透视表将多行转换为一列。我尝试查看过去的帖子,但找不到与我想做的事情相关的任何内容,或者我只是不知道如何正确搜索它。我想将 HAND、PECO、CHEP 行放入称为 EXTRA 的 1 列中,同时将 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

感谢您抽出宝贵时间提供帮助。

【问题讨论】:

    标签: sql oracle oracle11g pivot


    【解决方案1】:

    而不是select * from ( 在查询的最开始,写

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

    如果您希望 HANDPECOCHEP 中的任何一个可能是 NULL,请将它们中的每一个单独包装在 NVL(...., 0) 中(如果事实上,NULL 将被解释为零; 否则,保持原样,如果至少有一项是NULL,则结果将为NULL

    【讨论】:

    • 是的!太感谢了。完成此操作后,我能够让数据透视表完全按照需要显示。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2020-02-23
    相关资源
    最近更新 更多