Oracle PIVOT选择性行到列

时间:2019-03-18 13:35:31

标签: oracle pivot

预先感谢.... !!!

我正在根据一个列将PIVOT两个金额字段分成多个列,例如PIVOT_NAME 我还有其他多个充当BK的字段,这些字段将保留为行 BK栏:BKCOL1,DEPT,YEAR_PD,TRANS_DATE 例如输入

BKCOL1  DEPT    YEAR_PD TRAN_DATE   PIVOT_NAME  TY_SALES    LY_SALES
100_bk  D1      2020002 2019-10-11  P1         -1           1
100_bk  D1      2020002 2019-10-12  P2         -2           2
100_bk  D1      2020002 2019-10-11  P3         -3           3
100_bk  D1      2020002 2019-10-14  P4         -4           4
100_bk  D2      2020002 2019-10-14  P1         -5           5
100_bk  D2      2020002 2019-10-16  P2         -7           7
100_bk  D2      2020002 2019-10-17  P3         -8           8
100_bk  D2      2020002 2019-10-18  P5         -9           9

也添加输入表图像

INPUT TABLE

预期输出: Expected OUTPUT

所有TY%字段均来自TY_SALES 所有LY%字段均来自LY_SALES 并基于PIVOT_NAME 也就是说,如果“ PIVOT_NAME = P1,那么我想填充TY_P1_SALESLY_P1_SALES,依此类推。

1 个答案:

答案 0 :(得分:0)

pivot提供所需的输出:

select bkcol1, dept, year_pd, tran_date, 
       p1_ty, p2_ty, p3_ty, p4_ty, p5_ty,
       p1_ly, p2_ly, p3_ly, p4_ly, p5_ly
  from input
  pivot (sum(ty_sales) ty, sum(ly_sales) ly for pivot_name in ('P1' p1, 'P2' p2, 'P3' p3, 'P4' p4, 'P5' p5))
  order by dept, tran_date

demo

如果需要其他列,请为这些列添加别名。