1
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

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

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

4

2 回答 2

5

一条CASE语句不能返回一组值......但这个查询应该给你相同的结果:

WHERE CONDITION1='ABC'
AND Status =
    CASE  
        WHEN 1 THEN 'True'
        WHEN 2 THEN 'False'
        WHEN 3 THEN NULL
        WHEN 4 THEN Status
    END

另外,请注意,除非您有ANSI_NULLS OFF, Statuswill never = NULL... 您需要IS NULL用于此比较,并且您需要CASE完全放弃该声明。

于 2012-11-19T17:25:19.940 回答
5

跳过 CASE 语句并使用 OR。并且根据 ANSI 标准,不要与 NULL 比较

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'))))
于 2012-11-19T17:32:16.660 回答