T -SQL Используйте CTE для инициализации переменных внутри представления

Мне нужно создать представление -, оно состоит из пяти операторов UNION ALL. Отличие каждого оператора в том, что данные фильтруются по разным периодам :

. Например:

SELECT  RecordName
      ,CASE
        WHEN RecordDate > DATEADD(WEEK,-1,GETUTCDATE()) THEN 'This week'
        END
UNION ALL
SELECT  RecordName
      ,CASE
        WHEN RecordDate > DATEADD(WEEK,-2,GETUTCDATE()) THEN 'Previos week'
        END
SELECT  RecordName
      ,CASE
        WHEN RecordDate > DATEADD(Year,-1,GETUTCDATE()) THEN 'Year ago'
        END

Затем я создаю сводку, используя представление.

В любом случае, условие "дата" вычисляется более сложным образом. Я также использую функцию GETUTCDATE (), и она будет возвращать другое значение в любую миллисекунду.

Вот почему я хочу использовать выражение CTE, чтобы инициализировать все переменные условия даты или выполнить вычисления один раз только в CTE, а затем использовать эти условия даты в предложении SELECT -UNION.

Проблема в том, что я не могу объединить информацию из CTE с оператором SELECT ниже, и когда я пытаюсь использовать условия даты напрямую (без соединения ), это не работает («Ошибка -Недопустимое имя столбца" ).

Это пример того, что я пытаюсь сделать:

WITH DatePeriods(ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate) AS
(
    SELECT  DATEADD(WEEK,-1,GETUTCDATE())  AS ThisWeek
          ,...                            AS LastWeek
          ,...                            AS MonthToDate
          ,...                            AS QuarterToDate
          ,DATEADD(YEAR,-1,GETUTCDATE())  AS YearToDate
)

SELECT  RecordName
      ,CASE
        WHEN RecordDate > ThisWeek THEN 'This week'
        END
UNION ALL
SELECT  RecordName
      ,CASE
        WHEN RecordDate > LastWeek THEN 'Previos week'
        END
SELECT  RecordName
      ,CASE
        WHEN RecordDate >YearToDate THEN 'Year ago'
        END
5
задан gotqn 21 June 2013 в 12:16
поделиться