发生“CASE ELSE”时从SQL中删除行

发生“CASE ELSE”时从SQL中删除行,sql,sql-server-2008,Sql,Sql Server 2008,这是我的sql查询: select case when table.field1 = 1 then 1 when table.field2 = 3 then 3 when table.field2 = 4 then 4 when table.field3 = 1 then 5 else .... Status //item name from table 我希望在发生else时->该行将从数据集中删

这是我的sql查询:

select case when table.field1 = 1 then 1
            when table.field2 = 3 then 3
            when table.field2 = 4 then 4
            when table.field3 = 1 then 5
            else .... Status //item name
from table
我希望在发生else时->该行将从数据集中删除。 由于某种原因,我不能在where子句中使用Status


想法?

最直接的方法是从何时开始为字段设置条件,即3,4中的字段1=1或字段2或字段3=1

您可以使用一个通用的表表达式:

with TempResult (id, status)
as
(
    select primary_key_column,
           case when table.field1 = 1 then 1
                when table.field2 = 3 then 3
                when table.field2 = 4 then 4
                when table.field3 = 1 then 5
                else 0
    from table
)

select id
from TempResult
where status > 0

试想一下,这个箱子里有20个箱子。它们比这里显示的要长。我同意,这可能会变得难看,但您的请求意味着您确实希望where子句中包含所有这些条件。不能在查询的where部分使用case生成的字段。整个方法是否可能是错误的?你能提供更多关于你想做什么的细节吗?