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_AGG
或FOR 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 动态数据透视表列顺序的主要内容,如果未能解决你的问题,请参考以下文章