【问题标题】:Oracle: How to use pivot muilti column?Oracle:如何使用数据透视多列?
【发布时间】:2016-06-06 11:31:50
【问题描述】:

我想要 Pivot 多列。 oracle 数据透视表有什么用?

SQL:

SELECT * FROM 
(
SELECT * 
FROM IRO_SIM A  
WHERE A.COM_CODE = 'AAQ' 
AND A.PCODE = 'AKIOP'              
)
PIVOT
(
LISTAGG(SIMTYPE,',') 
WITHIN GROUP (ORDER BY SIMTYPE) 
FOR SIMTYPE IN ('H','V')
)

样本数据:

COM_CODE | PCODE | L_VALUE | A_SIM | AMT_SIM | SIMTYPE
A        | AKIOP | 1700    | TOTAL | 50      | H
A        | AKIOP | 500     | EACH  | 100     | V

A        | BHUIO | 200     | TOTAL | 500     | H
A        | BHUIO | 600     | TOTAL | 400     | V

我需要结果:

COM_CODE | PCODE | H_VALUE | H_ASIM | H_AMTSIM | V_VALUE | V_ASIM | V_AMTSIM
A        | AKIOP | 1700    | TOTAL  | 50       | 500     | EACH   | 100
A        | BHUIO | 200     | TOTAL  | 500      | 600     | TOTAL  | 400

谢谢提前:)

【问题讨论】:

    标签: oracle pivot pivot-table multiple-columns


    【解决方案1】:

    只需列出多列。 PIVOT 子句中的每个表达式都将与 FOR 子句中的每个值匹配。所以,你想要的是这样的:

    SELECT * FROM d
    PIVOT ( sum(l_value) as value, max(a_sim) as asim, sum(amt_sim) as amtsim
            FOR simtype in ('H' AS "H", 'V' AS "V") )
    

    有数据...

    with d as ( 
    SELECT 'A' com_code, 'AKIOP' pcode, 1700 l_value, 'TOTAL' a_sim,  50 amt_sim, 'H' simtype FROM DUAL UNION ALL
    SELECT 'A' com_code, 'AKIOP' pcode,  500 l_value, 'EACH'  a_sim, 100 amt_sim, 'V' simtype FROM DUAL UNION ALL
    SELECT 'A' com_code, 'BHUIO' pcode,  200 l_value, 'TOTAL' a_sim, 500 amt_sim, 'H' simtype FROM DUAL UNION ALL
    SELECT 'A' com_code, 'BHUIO' pcode,  600 l_value, 'TOTAL' a_sim, 400 amt_sim, 'V' simtype FROM DUAL)
    SELECT * FROM d
    PIVOT ( sum(l_value) as value, max(a_sim) as asim, sum(amt_sim) as amtsim
        FOR simtype in ('H' AS "H", 'V' AS "V") )
    

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 2020-09-24
      • 2021-11-25
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多