如何解决动态日期范围上的 SQL Pivot
我正在尝试使用动态日期范围(前 90 天)对 SSMS 中的日期进行旋转计数,但我的日期在结果中是乱序的。有没有办法在这个查询中放置一个 ORDER BY?或者,有人有更好的方法来调整动态日期范围吗?
declare @cols as nvarchar(max);
declare @query as nvarchar(max);
select @cols = stuff((select distinct
',' + quotename(ColumnDate)
from
[Database].[Schema].[ExampleTable] as et
for
xml path(''),type).value('.','nvarchar(max)'),1,'');
select @query = 'select *
from
(select et.Place,et.ColumnDate,et.ValueToAggregate
from
[Database].[Schema].[ExampleTable] as et) as t
pivot
(count(ValueToAggregate)
for ColumnDate in( ' + @cols + ')' + ') as p; ';
execute(@query);
The dates in my results are out of order...
Place |3/25/2021 |4/19/2021 |2/21/2021 |3/22/2021 |2/14/2021 |2/11/2021
Test_Facility_1 |6 |5 |0 |2 |0 |3
Test_Facility_2 |1 |0 |0 |2 |2 |2
Test_Facility_3 |0 |1 |0 |1 |1 |2
Test_Facility_4 |124 |111 |85 |83 |95 |97
解决方法
您可以在 ORDER BY
和 FROM
之间的第一个 SELECT 语句中使用 FOR XML
。但是,在 order by 中确切使用哪个表达式可能取决于列 ColumnDate
的数据类型。如果是日期列,那么你可以使用
ORDER BY ColumnDate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。