在 SQL 服务器中使用 Pivot 将行转换为列
Use Pivot to convert rows to columns in SQL Server
我知道之前有人问过这个问题,我确实找到了答案,但我仍然无法实现 PIVOT
。
当前 table:
day hour sales_val
------------------------
Monday 8 110.12
Monday 9 51.58
Monday 10 78.98
Tuesday 9 207.38
Tuesday 10 61.30
...
预期结果:
hour monday tuesday ...
----------------------------
8 110.12 NULL
9 51.58 207.38
10 78.98 61.30
table 将始终包含 7 个不同的日子(周一至周日),并且不会始终包含相同的时间,因此 NULL
值。如前所述,我找到了实现 PIVOT
的各种答案,但我不太明白如何在那里使用它。
输出这个的主查询是:
SELECT [hour], [Monday], [Tuesday]
FROM (
SELECT [day], [hour], [sales_val] FROM YourTable
) AS src
PIVOT (
SUM(sales_val) FOR [day] IN ([Monday], [Tuesday])
) AS pvt
如果您想在输出中使用零而不是空值,那么只需 COALESCE
结果:
SELECT [hour], COALESCE([Monday], 0) AS [Monday], COALESCE([Tuesday], 0) AS [Tuesday]
FROM (
SELECT [day], [hour], [sales_val] FROM YourTable
) AS src
PIVOT (
SUM(sales_val) FOR [day] IN ([Monday], [Tuesday])
) AS pvt
显然这只适用于周一和周二 - 根据需要扩展...
我知道之前有人问过这个问题,我确实找到了答案,但我仍然无法实现 PIVOT
。
当前 table:
day hour sales_val
------------------------
Monday 8 110.12
Monday 9 51.58
Monday 10 78.98
Tuesday 9 207.38
Tuesday 10 61.30
...
预期结果:
hour monday tuesday ...
----------------------------
8 110.12 NULL
9 51.58 207.38
10 78.98 61.30
table 将始终包含 7 个不同的日子(周一至周日),并且不会始终包含相同的时间,因此 NULL
值。如前所述,我找到了实现 PIVOT
的各种答案,但我不太明白如何在那里使用它。
输出这个的主查询是:
SELECT [hour], [Monday], [Tuesday]
FROM (
SELECT [day], [hour], [sales_val] FROM YourTable
) AS src
PIVOT (
SUM(sales_val) FOR [day] IN ([Monday], [Tuesday])
) AS pvt
如果您想在输出中使用零而不是空值,那么只需 COALESCE
结果:
SELECT [hour], COALESCE([Monday], 0) AS [Monday], COALESCE([Tuesday], 0) AS [Tuesday]
FROM (
SELECT [day], [hour], [sales_val] FROM YourTable
) AS src
PIVOT (
SUM(sales_val) FOR [day] IN ([Monday], [Tuesday])
) AS pvt
显然这只适用于周一和周二 - 根据需要扩展...