【问题标题】:SQL Pivot on Dynamic Date Range动态日期范围的 SQL 透视图
【发布时间】:2021-07-18 00:20:56
【问题描述】:

我正在尝试使用动态日期范围(前 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, 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

【问题讨论】:

    标签: sql sql-server pivot ssms dynamic-pivot


    【解决方案1】:

    您可以在FROMFOR XML 之间的第一个SELECT 语句中使用ORDER BY。但是,在 order by 中确切使用哪个表达式可能取决于列 ColumnDate 的数据类型。如果它是一个日期列,那么你可以使用

    ORDER BY ColumnDate
    

    【讨论】:

    • 感谢@FrankPl,当我使用 ORDER BY ',' + quotename(ColumnDate) 时它起作用了
    • 我注意到我的结果显示为 NULL 而不是零。我尝试将 ISNULL 和 Coalesce 放在需要聚合的值周围。如何为 NULL 拉零?
    • @DavidMarshall 那将是一个不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多