我有以下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
我看过使用一个支点但不确定如何在没有硬编码的情况下显示日期
答案 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) ..