如何为此问题创建数据透视表:
How to create a pivot tablefor this problem:
这是我的原创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
运算符,因为通常上述方法执行得更好(而且我也发现它更容易阅读)。
这是我的原创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
运算符,因为通常上述方法执行得更好(而且我也发现它更容易阅读)。