当查询创建新列时,如何在' Where'中引用此列。条款?

时间:2017-01-06 11:10:24

标签: sql-server

我的查询使用CASE表达式创建新列。

如何在随后的WHERE子句中引用此列?

我最好通过原始WHEN行中的CASE表达式查询此列吗?

1 个答案:

答案 0 :(得分:1)

您必须将基本查询放入子查询或CTE中,以便外部查询代码能够引用这个新创建的"在运行中"按名称列。

根据Logical Processing Order of the SELECT statement,您不能直接引用新推出的"即时" WHERE子句中的列(因为WHERE子句是在SELECT中的列列表之前处理的。

类似的东西:

SELECT (list-of-columns)
FROM
    (SELECT
         (list-of-columns),
         CASE ...... END AS NewColumn
     FROM 
         dbo.YourTable) x
WHERE
    x.NewColumn = .......

或CTE:

USING YourBaseCTE AS 
(
     SELECT
         (list-of-columns),
         CASE ...... END AS NewColumn
     FROM 
         dbo.YourTable
) 
SELECT (list-of-columns)
FROM YourBaseCTE
WHERE NewColumn = .......