【发布时间】: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安全地注入列名。
标签: sql-server dynamic pivot