【发布时间】:2015-09-05 16:16:11
【问题描述】:
我需要从这种格式动态转换表#table中的数据:
spot_id 名称 pct -------- ---- --- 1 一个 2 1 乙 8 1 C 6 2 一个 4 2 乙 5 3 一个 5 3 天 1 3 E 4到:
spot_id A B C D E ------- --- --- --- --- --- 1 2 5 6 0 0 2 4 5 0 0 0 3 5 0 0 1 4问题是我事先不知道“name”列的值是什么或有多少,所以我认为我必须使用某种动态 SQL 旋转
刚刚想出了解决问题的方法:
将@cols 声明为 NVARCHAR(MAX), @query AS NVARCHAR(MAX) 选择 @cols = STUFF((SELECT ',' + QUOTENAME(name) from (SELECT DISTINCT name FROM #table) T FOR XML PATH(''), 类型 ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 设置 @query = N'SELECT spot_id,' + @cols + N' 从 ( 选择 spot_id、名称、pct 来自#table ) 作为 x 枢 ( 最大值(百分比) 对于 (' + @cols + N') 中的名称 ) 作为 p ' exec sp_executesql @query;如果有更优雅的方式来做同样的事情?
【问题讨论】:
标签: sql-server tsql pivot dynamic-sql