sql - 如何将行变为列
问题描述
我在将行转换为列时遇到了一些问题。原始表是这样的
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,我想将数据放在同一行。如何写关于那个的查询?有什么帮助吗?谢谢!
解决方案
你需要聚合。我建议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;
推荐阅读
- node.js - Node.js net.Socket TCP 连接随机占用 > 4K ms
- docker - 在dask中,运行本身运行docker容器的任务的最简单方法是什么?
- python - 使用 PyCharm 在 docker 容器中运行 Python 代码
- bash - Bash:远程 SSH ncat 命令需要 sigint 才能退出
- linux - 用于用户自定义 http iFrame 的 Apache 反向代理
- python - 在 Keras 中保存模型检查点与保存整个模型
- python - 从 Rasa x 中的操作返回图像
- php - Abantecart错误安装错误,php中的数据库错误(10000)
- ruby-on-rails-5 - 如何保存双嵌套多对多关联?
- javascript - Django - Ajax 调用不输出任何内容