Select语句中的列名无效

时间:2014-09-27 09:04:26

标签: sql sql-server sql-server-2008

以下查询抛出

  

无效的列名WIP_Aging"

查询:

Select 
    ID, Assembly, Last_Accessed, DATEDIFF(day,Last_Accessed,GETDATE()) as WP_Aging 
from 
    Details 
where 
    WP_Aging >= 2

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并首先减少了设置。