来自CASE结果的

时间:2016-11-18 09:52:49

标签: sql sql-server sql-server-2008-r2

我有一个声明 - 简化

SELECT UserID,
CASE WHEN UserName = 'xxx' THEN 1 ELSE 0 AS Deleted
FROM User
WHERE Deleted = 0;

但这不起作用,因为Deleted无法使用。

有解决方法吗?我不能这样解决WHERE UserName <> 'xxx',因为在我的真实陈述中,这是一个巨大的子选择。

2 个答案:

答案 0 :(得分:4)

将原始查询包装在派生表中。 (由于列别名在同一查询的where子句中不可用。)

select *
from
(
    SELECT UserID,
           CASE WHEN UserName = 'xxx' THEN 1 ELSE 0 END AS Deleted
    FROM User
) dt
WHERE dt.Deleted = 0;

答案 1 :(得分:0)

我们可以在没有子查询的情况下使用如下。

SELECT * 
FROM [User]
WHERE (CASE WHEN UserName = 'xxx' THEN 1 ELSE 0 END)=0