TSQL - 在Where子句中使用派生选择列

Gre*_*reg 11 sql t-sql sql-server sql-server-2005 case

在TSQL中有没有办法做这样的事情:

select a,b,c,
case 
  when a=1 then 5
  when a=2 then 6
end as d
from some_table
where d=6
Run Code Online (Sandbox Code Playgroud)

实际的case语句真的很复杂,所以我试图避免在where子句中重复它?这有什么窍门吗?

(我认为在MySQL中使用"有d = 6"的技巧).

A-K*_*A-K 21

select
    a, b, c
from (
    select
        a, b, c,
        case 
          when a=1 then 5
          when a=2 then 6
        end as d
    from some_table
) as t
where d=6
Run Code Online (Sandbox Code Playgroud)


Red*_*ter 5

这是使用CTE的好地方,例如:

WITH MassagedData (a, b, c, d) AS
(
    select a, b, c,
        case 
          when a=1 then 5
          when a=2 then 6
        end as d
    from some_table
)

SELECT a,b,c
FROM MassagedData
where d=6 
Run Code Online (Sandbox Code Playgroud)