首页 > 解决方案 > 如何将行变为列

问题描述

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

  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

我尝试使用 decode() 函数,例如

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,我想将数据放在同一行。如何写关于那个的查询?有什么帮助吗?谢谢!

标签: sqloracle

解决方案


你需要聚合。我建议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;

推荐阅读