我在将行转换为列时遇到一些问题。原始表就是这样
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,我想将数据放在同一行。 如何编写有关该查询?有什么帮助吗?谢谢!
答案 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;