已编辑:我有一张收据表,如下所示。这里的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,但我不知道如何使用它。 任何人都可以帮助我
答案 0 :(得分:1)
使用条件聚合更容易实现:
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