2016-10-11 38 views
-1

我有以下SQLSQL計數 - 顯示一週範圍內列標題

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  

ive使用透視看了不知道我怎麼去顯示日期沒有硬編碼

回答

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) ..