以下查询抛出
无效的列名WIP_Aging"
查询:
Select
ID, Assembly, Last_Accessed, DATEDIFF(day,Last_Accessed,GETDATE()) as WP_Aging
from
Details
where
WP_Aging >= 2
答案 0 :(得分:5)
除非您创建CTE或Sub-Select,否则无法直接引用别名列名(WP_Aging
)。相反,你必须重复表达式:
Select
ID,
Assembly,
Last_Accessed,
DATEDIFF(day, Last_Accessed, GETDATE()) as WP_Aging
from
Details
where
DATEDIFF(day, Last_Accessed, GETDATE()) >= 2
这是CTE版本:
;with cteAging as
(
Select
ID,
Assembly,
Last_Accessed,
WP_Aging = DATEDIFF(day, Last_Accessed, GETDATE())
from
Details
)
select
ID,
Assembly,
Last_Accessed,
WP_Aging
from
cteAging
where
WP_Aging >= 2
答案 1 :(得分:1)
这是引擎的工作方式。 WHERE子句在SELECT之前完成。在SELECT期间,您基本上“创建”了一个名为WP_aging的列。如果你考虑它就有意义了。您希望在开始之前减少行并获得想要查看的数据。所以它做了WHERE并首先减少了设置。