我需要创建一个视图 - 它由五个 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 子句中使用此日期条件。
问题是,我无法使用下面的 SELECT 语句加入来自 CTE 的信息,并且当我尝试直接使用日期条件(不加入)时,它不起作用(“错误 - 列名无效”)。
这是我正在尝试做的一个例子:
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