2014-10-28 76 views
0

我有一个查询,看起来像这样:SQL服务器:列别名访问

Select (numberLateOrders/numberOfOrders) as percentFailed 
From Orders 

现在我希望能够添加Where条款,但它似乎访问列别名percentFailed像别名不直到查询完成才被识别。这是真的和/或有没有解决这个问题?

谢谢!

回答

2

一个外部查询只需添加到现有答案

或者使用子查询

select 
    percentFailed 
from (
    Select (numberLateOrders/numberOfOrders) as percentFailed 
    From Orders 
) t 
where 
    percentFailed > 0 
1

WHERE不能老是看到的别名,只是重复表达

Select (numberLateOrders/numberOfOrders) as percentFailed 
From Orders 
WHERE (numberLateOrders/numberOfOrders) >0 
3

是的,这是真的,列别名将无法访问/提供WHERE子句,因为执行的逻辑顺序的SQL和每即SELECT column aliasWHERE之后,因此WHERE将不能识别它们。你将不得不再次添加计算/表达WHERE像下面

Select (numberLateOrders/numberOfOrders) as percentFailed 
From Orders 
WHERE (numberLateOrders/numberOfOrders) > some_value 

另一种解决方案(没有更好的)是使用像

select percentFailed 
from 
(
    Select (numberLateOrders/numberOfOrders) as percentFailed 
    From Orders 
) tab 
where percentFailed > some_value