如何使行到列

时间:2019-04-24 18:41:10

标签: sql oracle

我在将行转换为列时遇到一些问题。原始表就是这样

  Date     CD      C1      C2    Amount  
2019-01    FEE     Y       N       100
2019-01    FEE     Y       Y       200
2019-01    REV     Y       N       300
2019-02    FEE     Y       N       100
2019-02    REV     N       N       100

我想得到下表

 Date     C1    C2   FEE      REV     Total
2019-01   Y     N    100      300      400
2019-01   Y     Y    200      null     200
2019-02   Y     N    100      null     100
2019-02   N     N    null     100      100

我尝试使用

之类的encode()函数
select Date, C1, C2,
       decode(cd,'FEE', Amount) FEE,
       decode(cd,'REV', Amount) REV
from table group by.........

它将得到结果

 Date     C1    C2   FEE      REV     
2019-01   Y     N    100      null
2019-01   Y     N    null     300
2019-01   Y     Y    200      null 

如果它们具有相同的日期,C1和C2,我想将数据放在同一行。 如何编写有关该查询?有什么帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您需要聚合。我建议在条件部分使用case

select Date, C1, C2,
       sum(case when cd = 'FEE' then Amount end) as FEE,
       sum(case when cd = 'REV' then Amount end) as REV,
       sum(Amount) as TOTAL
from table
group by Date, C1, C2;