2014-09-27 4 views
1

После запроса броскамиНеверное имя столбца в Select Statement

Недопустимое имя столбца WIP_Aging»

Запрос:

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

Я что-то упустил? – Vijay

+3

Вы не можете ссылаться на псевдоним столбца из списка столбцов в разделе 'WHERE', так как выражение' WHERE' разобрано перед списком столбцов –

ответ

4

Если вы не создать КТР или Суб-Выбрать вы можете» t ссылайтесь на имя псевдонимы колонки (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 
+0

Это сработало спасибо ... Но почему это произошло ??? – Vijay

1

Это способ работы двигателя. Предложение WHERE выполняется перед SELECT. Вы в основном «создали» столбец WP_aging во время SELECT. Если вы думаете об этом, это имеет смысл. Вы хотите уменьшить строки перед тем, как идти, и получить данные, которые хотите увидеть. Таким образом, он делает WHERE и сначала уменьшает набор.

Смежные вопросы