在Where子句中使用别名

时间:2018-05-16 18:20:51

标签: sql sql-server

我的select语句中有一个非常大的大小写,以1或0结尾,并且别名为“x”。我想在我的WHERE语句中检查“x”是否为1,但我知道别名不能在where语句中使用。检查此条件的唯一方法是在WHERE子句中包含原始case语句吗?

4 个答案:

答案 0 :(得分:2)

您可以使用CROSS/OUTER APPLY

SELECT *
FROM tab t
CROSS APPLY (SELECT CASE WHEN t.col ... THEN
                          -- very complex conditions
                    END
            ) sub(c)
WHERE sub.c = ?;

此方法允许您避免嵌套子查询。

答案 1 :(得分:2)

您可以将您的陈述放在cte:

; with CTE as (Select .... as X from ...)

Select *
from CTE
where X = 1

答案 2 :(得分:2)

怎么样更简单?你的case表达式有点回归。在我看来,如果你需要一个where子句,就不需要多次运行case表达式。

select MyReturn = 1
from SomeTable
where case with a whole bunch of logic end = 1

或者如果您需要将其参数化为此类。

select MyReturn = @MyBit
from SomeTable
where case with a whole bunch of logic end = @MyBit

答案 3 :(得分:1)

没有子查询工作得很好吗?

SELECT ST.*
  FROM (SELECT TBL.*,
               CASE WHEN ComplexCondition THEN 'Something' 
                    ELSE 'SomethingElse'
                END AS aliasedColumn
          FROM SomeTable
       ) ST
 WHERE ST.aliasedColumn = 'Something';