如何使行值成为标题列

时间:2020-01-27 03:24:31

标签: sql sql-server sql-server-2008 pivot

已编辑:我有一张收据表,如下所示。这里的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,但我不知道如何使用它。 任何人都可以帮助我

1 个答案:

答案 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

Demo on SQLFiddle

相关问题