我想生成一个时间表,我有这些列:
Time Itinerary ID
06:35 3579 87069
07:15 3031 63722
07:15 3031 68218
16:30 3031 82745
16:30 3031 88308
21:00 3031 72212
21:00 3031 76241
06:55 3576 87069
07:25 3333 63722
07:25 3333 68218
16:40 3333 82745
我希望得到这个:
3579 3031 3576 3333
87069 06:35 06:55
63722 07:15
68218 07:15
.
.
.
行程数是可变的,我可以从一个表中获取此信息。
答案 0 :(得分:0)
动态PIVOT的完整工作示例:
CREATE TABLE #DataSource
(
[Time] TIME
,[Itinerary] INT
,[ID] INT
);
INSERT INTO #DataSource ([Time], [Itinerary], [ID])
VALUES ('06:35', '3579', '87069')
,('07:15', '3031', '63722')
,('07:15', '3031', '68218')
,('16:30', '3031', '82745')
,('16:30', '3031', '88308')
,('21:00', '3031', '72212')
,('21:00', '3031', '76241')
,('06:55', '3576', '87069')
,('07:25', '3333', '63722')
,('07:25', '3333', '68218')
,('16:40', '3333', '82745');
DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
,@DynamicPIVOTColumns NVARCHAR(MAX);
SET @DynamicPIVOTColumns = STUFF
(
(
SELECT ',[' + CAST([Itinerary] AS VARCHAR(12)) + ']'
FROM #DataSource
GROUP BY [Itinerary]
ORDER BY [Itinerary]
FOR XML PATH('') ,TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,1
,''
);
SET @DynammicTSQLStatement = N'
SELECT *
FROM #DataSource
PIVOT
(
MAX([Time]) FOR [Itinerary] IN (' + @DynamicPIVOTColumns + ')
) PVT';
EXEC sp_executesql @DynammicTSQLStatement;
DROP TABLE #DataSource;