如何为此问题创建数据透视表:

How to create a pivot tablefor this problem:

这是我的原创table:

Original table

我希望它是:

CityID | 1 | 2 | 3 | 4 | 5 | 6 | 7
_____________________________________
1024    0800 0900 and so on...

这是我的代码,但在 FOR 附近出现语法错误。

select * from
(select SIDURI as CityID, DAY as ArrivalDay, T_FROM as TimeArrival
from RNFIL488)  as timingTable
pivot(
timing.SIDURI as CityID
timingTable.T_FROM as TimeArrival
for timing.DAY as ArrivalDay in (
[1],
[2],
[3],
[4],
[5],
[6],
[7]
)
) as pivot_table 

我建议如果您没有很多数据,那么您可以截断 table 并重新填充 table。并且不要忘记您的 id 列应该是唯一的并且在 id.

上使用 auto_increment

此处使用ROW_NUMBER

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY CityID ORDER BY ArrivalDay) rn
    FROM RNFIL488
)

SELECT
    CityID,
    MAX(CASE WHEN rn = 1 THEN TimeArrival END) AS [1],
    MAX(CASE WHEN rn = 2 THEN TimeArrival END) AS [2],
    MAX(CASE WHEN rn = 3 THEN TimeArrival END) AS [3],
    MAX(CASE WHEN rn = 4 THEN TimeArrival END) AS [4],
    MAX(CASE WHEN rn = 5 THEN TimeArrival END) AS [5],
    MAX(CASE WHEN rn = 6 THEN TimeArrival END) AS [6],
    MAX(CASE WHEN rn = 7 THEN TimeArrival END) AS [7]
FROM cte
GROUP BY
    CityID;

这假设您的原始来源 table 每个城市始终有 7 天到达。如果没有,那么我们可能不得不使用日历 table 来引入缺失的数据。另外,我避免使用 PIVOT 运算符,因为通常上述方法执行得更好(而且我也发现它更容易阅读)。