MS SQL Server动态透视表按chartaccessdate排序日期列问题咨询
MS SQL Server动态透视表日期列排序解决方案
核心问题原因
当前动态列拼接逻辑未对去重后的日期字段做排序,因此生成的透视列顺序完全依赖SQL Server的默认返回顺序,无法保证按时间先后排列。
修复方案
仅需在拼接动态列名的查询语句中添加ORDER BY chartaccessdate ASC,即可保证拼接的列名按日期从早到晚的顺序生成,透视后的列自然符合需求。
修改后的完整代码
declare @columnnames nvarchar(max)='' declare @sql nvarchar(max)='' select @columnnames += quotename(chartaccessdate) + ',' from (select distinct chartaccessdate from #temp ) as s -- 新增排序语句,保证日期列按从早到晚顺序拼接 order by chartaccessdate asc 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 +' ) )as pvt ' execute sp_executesql @sql
可选扩展说明
如果你的chartaccessdate字段包含时分秒,且仅需要按日期维度聚合、生成列,可在去重查询时统一转换为日期类型,避免同一天不同时分秒生成多列:
from (select distinct cast(chartaccessdate as date) as chartaccessdate from #temp ) as s order by cast(chartaccessdate as date) asc
内容的提问来源于stack exchange,提问作者g.senorsenor
相关产品推荐
相关产品推荐

