我正在使用Microsoft SQL服务器。
我经常遇到这种代码:
select (a*5 + a*4 + a*3) as a1 --some complicated and very long manipulation of column 'a'
into #Temp1
from Table1
select a1, case when a1 > 5 then 1 else 0 end as myResult
from #Temp1
我尝试过使用:
select (a*5 + a*4 + a*3) as a1, case when a1 > 5 then 1 else 0 end as myResult
from Table1
它会将错误视为' a1'的无效列名。我理解这一点,但对于像我这样的情况,有没有办法避免创建#Temp1步骤?
编辑: 我知道这样的编码结构:
select (a*5 + a*4 + a*3) as a1, case when (a*5 + a*4 + a*3) > 5 then 1 else 0 end as myResult
from Table1
对于一个非常错综复杂的操纵柱子' a'代码变得不可读。
答案 0 :(得分:4)
您不能引用在同一个select语句中创建的列,但您可以这样做:
select a1, case when a1 > 5 then 1 else 0 end as myResult
from (
select (a*5 + a*4 + a*3) as a1 --some complicated and very long manipulation
from Table1
) X
你也可以用CTE做类似的事情,或者使用外部应用来创建带有select的新列。
答案 1 :(得分:0)
您可以轻松地将计算放入您的选择中两次,但我重读了您的问题,并意识到您说计算稍微高一点,所以我会选择James Z的答案。
select (a*5 + a*4 + a*3) as a1, case when (a*5 + a*4 + a*3) > 5 then 1 else 0 end as myResult
from Table1