SQL Server: как выводить инструкцию SELECT в запрос WHILE в одну таблицу?

Я использую следующее утверждение:

DECLARE @start_date date, @end_date date;
SET @start_date = '2016-06-01';

WHILE @start_date < '2017-03-31'
BEGIN
    SET @end_date = DATEADD(day, 6, @start_date);

    SELECT @start_date AS startDate, @end_date AS endDate

    SET @start_date = DATEADD(day, 7, @start_date);
END;

но с запросом выше, он выводит таблицу каждый раз, когда он циклически выполняет оператор select, возвращая выход следующим образом:

+------------+------------+
| startDate  | endDate    |
+------------+------------+
| 2016-06-01 | 2016-06-07 |
+------------+------------+

+------------+------------+
| startDate  | endDate    |
+------------+------------+
| 2016-06-08 | 2016-06-14 |
+------------+------------+

Я хотел бы, чтобы результат был следующим:

+------------+------------+
| startDate  | endDate    |
+------------+------------+
| 2016-06-01 | 2016-06-07 |
+------------+------------+
| 2016-06-08 | 2016-06-14 |
+------------+------------+

Как объединить результаты в одну таблицу, как указано выше?

Спасибо!

sql-server,tsql,

1

Ответов: 1


3 принят
-- use recursive cte
; with dates as
(
    select @start_date AS startDate, DATEADD(DAY, 6, @start_date) AS endDate
    union all
    select DATEADD(DAY, 7, startDate) AS startDate, DATEADD(DAY, 7, endDate) AS endDate
    from    dates
    where   startDate < '2017-03-31'

)
select  *
from    dates

В качестве альтернативы вы также можете использовать таблицу номеров.

Если вы хотите придерживаться своего метода использования WHILE - LOOP, вставьте даты в таблицу или таблицу temp и выведите их после цикла

sql-server, tsql,
Похожие вопросы