SQL计数 - 将周范围显示为列标题

时间:2016-10-11 07:40:59

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

我有以下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

这会计算与criterea匹配的所有记录,并显示

等结果
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    

我看过使用一个支点但不确定如何在没有硬编码的情况下显示日期

1 个答案:

答案 0 :(得分:1)

例如,您需要动态sql,请参阅SQL Server dynamic PIVOT query?。与其他动态枢轴唯一的本质区别是使用tally表创建列列表的方式(此处为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) ..