Мне нужно создать представление -, оно состоит из пяти операторов 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