2016-10-01 64 views
2

我在我的select语句中投射一列。 (关系代数意义上的“项目”)。为了减少代码重复,有没有办法在我的where子句中引用投影列?或者有更好的方法来做到这一点?引用投影/选定列?

例子:

select 
    (A.Column + A.Column2) * 8 'Column' 
from A 
where 
    (A.Column + A.Column2) * 8 < 1000 

基本上,我要问,如果我们认为列由表被“命名空间”(其中A是一个命名空间和A.Column是在命名空间列),是:有没有办法引用我们当前在该表的where子句中选择的临时表的名称空间?

回答

2

另一种方法是使用cte,公用表表达式。

with cte as(
    select (A.Column + A.Column2) * 8 as [Column] from A 
) 
Select * from cte 
Where [Column] < 1000 
2

你可以做到这一点;

select * from 
(
select (A.Column + A.Column2) * 8 as Col from A 
) tmp 
where Col<1000 
+0

你没有错,但是EWW ... :) 我猜它可能是不可能的,因为(IIRC从DB类),如果你概念化查询,有操作的顺序,选择/投影阶段是最后一个。 – Tyler