在 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

显然这只适用于周一和周二 - 根据需要扩展...