2013-04-19 4 views
0

Использование SQL Server. У меня есть следующий вопрос: Я создаю КТР на основе начала/окончания срока, который генерирует набор строк для каждой недели между двумя датами, как это:SQL Server: использование результатов строки CTE в виде столбцов

StartDate  EndDate 
2013-02-25 00:00:00.000 2013-03-03 00:00:00.000 
2013-04-01 00:00:00.000 2013-04-07 00:00:00.000 

Теперь я хотел бы использовать неделю строки в другом выражении SQL в виде столбцов, поэтому COLUMN1 | НЕДЕЛЯ 1 | НЕДЕЛЯ 2 | НЕДЕЛЯ 3 ...

Я не уверен, как это осуществить. Мой оператор CTE приведен ниже.

Любые идеи?

Спасибо!

declare @sDate datetime, 
     @eDate datetime 

select @sDate = '2013-02-25', 
     @eDate = '2013-04-25'; 

WITH Weeks_CTE (StartDate, EndDate) 
AS 
(
    select @sDate StartDate, DATEADD(wk,DATEDIFF(wk, 0, @sDate), 6) EndDate 
    union all 
    select dateadd(ww, 1, StartDate), 
    dateadd(ww, 1, EndDate) 
    from Weeks_CTE 
    where dateadd(ww, 1, StartDate)<= @eDate 
) 
+0

Непонятно из вашего вопроса, что вы хотите вернуть. Можете ли вы опубликовать образцы данных и ожидаемые результаты. –

+0

В качестве побочного примечания лучше [не использовать 'BETWEEN' с типами даты/времени/времени, особенно в SQL Server] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what -do-between-and-the-devil-have-in-common.aspx) Вы не используете этот оператор здесь, но вы можете получить тот же эффект, учитывая, что последняя строка: 'где dateadd (ww, 1, StartDate) <= @ eDate'. Кроме того, я с подозрением отношусь к тому, что вы делаете вещи через _week_, когда вы добавляете ** 6 ** дней .... –

ответ

1

Для того, чтобы сдвинуть результаты строк в столбцы, вам нужно сделать стержень.

Если столбцы будут динамическими, исходя из результатов первого запроса, вам необходимо создать динамический стержень.

Пожалуйста, проверьте this question и сделайте интенсивный поиск в Google, чтобы узнать о динамических центрах.

Смежные вопросы