SQL 动态数据透视表列顺序

Posted

技术标签:

【中文标题】SQL 动态数据透视表列顺序【英文标题】:SQL Dynamic Pivot Table Column Order 【发布时间】:2021-10-27 13:30:51 【问题描述】:

我在 ms sql server 中有一个动态数据透视表。 列名是日期,并以随机顺序出现。 我想对日期(列)进行排序,以便它们按时间顺序显示,最早的排在第一位,最近的排在最后,这样我就可以按日期对数据进行趋势分析。 我不知道如何对列进行排序。 日期变量名称是chartaccessdate。 任何帮助表示赞赏。

这是我的代码

declare @columnnames nvarchar(max)=''       
declare @sql nvarchar(max)=''
select  @columnnames += quotename(chartaccessdate) + ','
from (select distinct chartaccessdate from #temp ) as s 

set @columnnames=left(@columnnames,len(@columnnames)-1) 
set @sql=   





'select * from (

select --phase, 
unit,OccupationCode occode
,OccupationCode , chartaccessdate from #temp


) as a 

Pivot


( count(OccupationCode)
      FOR [chartaccessdate] IN (
      '+@columnnames +
      '
 -- "2021-08-23"
 --,"2021-08-24"
 --,"2021-08-21"
 --,"2021-08-22"
) )as pvt '
  

 execute sp_executesql @sql

【问题讨论】:

你不应该使用变量合并 select @columnnames += 来聚合,这是不可靠的。请改用STRING_AGGFOR XML。见dba.stackexchange.com/questions/68089/…。您还应该使用QUOTENAME 安全地注入列名。 【参考方案1】:

而不是SELECT DISTINCT,一个快速的选择是:

select top 1000 chartaccessdate from #temp group by chartaccessdate order by 1

【讨论】:

@g.senorsenor 总是乐于提供帮助

以上是关于SQL 动态数据透视表列顺序的主要内容,如果未能解决你的问题,请参考以下文章

过滤数据透视表列,仅在

数据透视表列重命名

MySQL 数据透视表列数据作为行

具有多列日期的 SQL Server 数据透视表

SQL 数据透视表动态

无论如何要在 Python 中重新排序数据透视表列?