我有下面提到的表格:
drn RecNum Name Value
----------------------------------------------
1 1 ad1_pk 1
2 1 ad1_address1 P.O. Box 5036
3 1 ad1_address2 NULL
4 1 ad1_address3 NULL
5 1 ad1_ctyfk 56
6 1 ad1_postalcode 80155-5036
7 1 ad1_active Y
8 1 ad1_irstat A
9 1 ad1_irdata NULL
10 1 ad1_at1fk 1
1 2 ad1_pk 2
2 2 ad1_address1 1871 S. Broadway
3 2 ad1_address2 NULL
4 2 ad1_address3 NULL
5 2 ad1_ctyfk 1
6 2 ad1_postalcode 80210
7 2 ad1_active Y
8 2 ad1_irstat A
9 2 ad1_irdata NULL
10 2 ad1_at1fk 1
我正在使用下面提到的查询创建数据透视:
declare @var nvarchar(max)
declare @sql nvarchar(max)
set @var = stuff((select distinct ',' + name from temp
for xml path('')),1,1,'') -- **this is giving distinct column list but the order of columns get changed..**
set @sql = 'select * from temp
pivot(max(value) for name in (' + @var + ')) as pvt'
exec sp_executesql @sql
有没有办法保持列的顺序不变?我希望 @var
中列出的列顺序与表中相同。
最佳答案
添加一个 GROUP BY
和一个 ORDER BY
子句(以替换 DISTINCT
),您可以在其中构建列列表,如下所示:
set @var = stuff((select ',' + min(name) from temp GROUP BY drn ORDER BY drn
for xml path('')),1,1,'')
并且不要忘记必要的聚合(我使用了 MIN())。谢谢@Ionic。
关于sql-server - 如何在动态数据透视中保持列顺序相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31237299/