2017-07-04 66 views
0

我有以下部分的sql语句来支持动态列。列(ClosingDate)的数量是可变的:数据透视表排序日期时间列

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(ClosingDate + '_'+ c.col) 
         from #TmpT 
         cross apply 
         (
         select 'Cnt' col 
         union all 
         select 'TT' 
        ) c 
      FOR XML PATH('') , TYPE   
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

的问题是,ClosingDate列地转化为varchar,他们被排序为varchar,而不是date

有没有办法订购datetime?谢谢!

回答

0

你可以试试先将它们转化为自己日期:

select @cols = STUFF((SELECT distinct ',' + 
          QUOTENAME(CONVERT(VARCHAR(8),ClosingDate,112) + '_'+ c.col) 
         from #TmpT 
         cross apply 
         (
         select 'Cnt' col 
         union all 
         select 'TT' 
        ) c 
      FOR XML PATH('') , TYPE   
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 
+0

它实际工作。我已经以CONVERT(VARCHAR(8),ClosingDate,112)格式传递了ClosingDate字段,并且查询仍然将日期命令定义为varchar,但由于格式为yyyymmdd,所以日期按照严格的顺序排列。非常感谢! – gae