Sql where子句中使用等于和in的CASE语句

Sql where子句中使用等于和in的CASE语句,sql,sql-server-2008,case-statement,in-clause,Sql,Sql Server 2008,Case Statement,In Clause,如何使用=编写第一个选项直接匹配的查询,但最后一个选项需要中的 上面的查询给出了错误,但我想要类似的结果,但我无法找到。CASE语句无法返回一组值。。。但此查询应提供相同的结果: WHERE CONDITION1='ABC' AND Status = CASE @Option WHEN 1 THEN 'True' WHEN 2 THEN 'False' WHEN 3 THEN NULL

如何使用
=
编写第一个选项直接匹配的查询,但最后一个选项需要
中的


上面的查询给出了错误,但我想要类似的结果,但我无法找到。

CASE
语句无法返回一组值。。。但此查询应提供相同的结果:

WHERE CONDITION1='ABC'
AND Status =
    CASE  @Option 
            WHEN 1 THEN 'True'
            WHEN 2 THEN 'False'
            WHEN 3 THEN  NULL
            WHEn 4 THEN **IN ('True', 'False', NULL)**
    END

另外,请注意,除非您禁用了
ANSI_NULLS
状态将永远不会
=NULL
。。。您需要使用
IS NULL
进行此比较,并且需要完全放弃
CASE
语句。

CASE
语句不能返回一组值。。。但此查询应提供相同的结果:

WHERE CONDITION1='ABC'
AND Status =
    CASE  @Option 
            WHEN 1 THEN 'True'
            WHEN 2 THEN 'False'
            WHEN 3 THEN  NULL
            WHEn 4 THEN **IN ('True', 'False', NULL)**
    END

另外,请注意,除非您禁用了
ANSI_NULLS
状态将永远不会
=NULL
。。。对于此比较,您需要使用
IS NULL
,并且需要完全放弃
CASE
语句。

跳过CASE语句并使用OR。根据ANSI标准:


跳过CASE语句并使用或。根据ANSI标准:


您使用的是哪个数据库?您不能像在
语句中尝试的那样直接与NULL进行比较,因为NULL表示未知。你必须有一个单独的语句,使用
IS NULL
。你在使用哪个数据库?你不能像在
in
语句中那样直接比较NULL,因为NULL意味着未知。为此,您必须有一个单独的语句,使用
IS NULL
+1表示偷偷摸摸。。。我喜欢您使用
状态
来涵盖所有三种可能的选择-0.4表示代码的作用不明显。总计:+0.6,四舍五入至+1.:-)如果status等于某个值而不是这些选项中的一个值,该怎么办?@PinnyM将尝试将NULL值与这里3的情况完全相同。@Bridge,我的观点是,如果@Option=4,status='foo',它将作为布尔值
true
,而最初的伪算法将是
false
。这对OP来说可能不是问题,但是这个场景还没有被处理…+1表示偷偷摸摸。。。我喜欢您使用
状态
来涵盖所有三种可能的选择-0.4表示代码的作用不明显。总计:+0.6,四舍五入至+1.:-)如果status等于某个值而不是这些选项中的一个值,该怎么办?@PinnyM将尝试将NULL值与这里3的情况完全相同。@Bridge,我的观点是,如果@Option=4,status='foo',它将作为布尔值
true
,而最初的伪算法将是
false
。这对OP来说可能不是问题,但这个场景还没有被处理。。。
WHERE CONDITION1='ABC'
AND ((@Option = 1 AND Status = 'True') OR
     (@Option = 2 AND Status = 'False') OR
     (@Option = 3 AND Status IS NULL) OR
     (@Option = 4 AND (Status IS NULL OR Status IN ('True', 'False'))))