2016-10-11 4 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) ..