【问题标题】:SQL count - showing week range as column headersSQL 计数 - 将周范围显示为列标题
【发布时间】:2016-10-11 07:40:59
【问题描述】:

我有以下 sql

    SELECT    COUNT(*) as Total, SentByText
FROM     letterCase WITH (nolock)
WHERE     (SenttoClientDate BETWEEN DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0) AND DATEADD(wk,DATEDIFF(wk,0,GETDATE()),6))
group by SentByText

这会计算所有符合条件的记录并显示类似的结果

Total       SentByText
    5          Fred
    4          Colin
    2          Bob
    1          Billy

我的问题是如何让结果显示为这样 - 将日期范围作为列标题

SentByText    10/10/2016  11/10/2016  12/10/2016  13/10/2016  
 fred              4           5           2          2           
 colin             7           2           0          2                  
 bob               2           1          12          6                 
 billy             9           0           0          2    

我看过使用数据透视表,但不确定如何在没有硬编码的情况下显示日期

【问题讨论】:

    标签: sql sql-server-2008 count pivot date-range


    【解决方案1】:

    您需要动态 sql,例如 SQL Server dynamic PIVOT query?。与其他动态枢轴的唯一本质区别是您使用计数表(此处为 sys.all_objects)创建列列表的方式:

    declare @cols varchar(max) = 
             stuff(
                 (select top(7)  ','+quotename(convert(varchar(12),DATEADD(wk,DATEDIFF(wk,0,GETDATE()), row_number() over(order by (select null)) -1) ,103))
                    from sys.all_objects for xml path(''))
                 ,1,1,'')
    
    select @cols;
    

    不要忘记在动态查询.. dt = convert(varchar(12),SenttoClientDate),103) ..中以相同的方式转换透视日期

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多