2016-10-01 63 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