sql-server - 如何在动态数据透视中保持列顺序相同

标签 sql-server sql-server-2008-r2

我有下面提到的表格:

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/

相关文章:

sql-server - 使用 Windows 加密文件系统 (EFS) 在 FILESTREAMS 上进行 SQL Server 2012 全文搜索

java - 使用 DSN 连接 SQL SEVER 时只允许有一个结果集实例

sql-server - SQL Server 恢复状态

sql-server - Azure sql跨数据库触发器

sql - SQL 中的多个(级联)等于运算符

sql - IN 具有相同值的倍数是否较慢?

TSQL 更改表为删除和更新的级联添加约束

c# - 错误 :RESTORE cannot process database 'Test_DB' because it is in use by this session

sql - 检测未按计划运行的作业

sql-server - SQL Server 将定义的函数与其他命令组合