sql - 如何将行值设置为标题列
问题描述
编辑:我有一张账单收据表,如下所示。这里的fee_title 计数是未知的。可以有多个标题超过 3 个标题
| rec_no| fee_title | amount|
---------------------------------
| 1 | monthly fee| 200|
| 1 | tie fee | 100|
| 2 | computer fee| 150|
| 3 | monthly fee| 200|
---------------------------------
我想在收据上方显示为
| rec_no| monthly fee| tie fee| computer fee |
-------------------------------------------------
| 1 | 200 | 100| 0 |
| 2 | 0 | 0| 150 |
| 3 | 200 | 0 | 0 |
-------------------------------------------------
我发现要解决这个问题我必须使用 PIVOT 但我不知道如何使用它。任何人都可以帮助我
解决方案
使用条件聚合更容易实现这一点:
SELECT rec_no,
SUM(CASE WHEN fee_title = 'monthly fee' THEN amount ELSE 0 END) AS [monthly fee],
SUM(CASE WHEN fee_title = 'tie fee' THEN amount ELSE 0 END) AS [tie fee],
SUM(CASE WHEN fee_title = 'computer fee' THEN amount ELSE 0 END) AS [computer fee]
FROM receipts
GROUP BY rec_no
但你也可以写成PIVOT
:
SELECT rec_no,
COALESCE([monthly fee], 0) AS [monthly fee],
COALESCE([tie fee], 0) AS [tie fee],
COALESCE([computer fee], 0) AS [computer fee]
FROM receipts
PIVOT (
SUM(amount)
FOR fee_title IN ([monthly fee], [tie fee], [computer fee])
) AS p
在这两种情况下,输出都是:
rec_no monthly fee tie fee computer fee
1 200 100 0
2 0 0 150
3 200 0 0
推荐阅读
- r - 如何同时使用 mutate_at 或 mutate_if 对数据进行多项操作
- laravel - 尝试使用两个循环时未定义的变量
- postgresql - 选择不返回值 Postgres-11.4
- jquery - 在 jQuery 中使用 find().slice() 时如何解决 attr("class") 的奇怪行为
- c++ - C++ 从模板中获取函数名
- arrays - 根据构造函数参数对飞镖列表进行排序
- visual-studio-code - VSCode 代码段插入可变颜色
- c# - 如何使用 DictionaryModelBinder?
- docker - 在出现问题之前,GKE 容器映像可以有多大?
- r - 跨日期汇总数据