我正在尝试添加一个CASE语句,但我需要一个OR而且我遇到了一些麻烦。
我不知道如何做到这一点,但我希望有人可以提供帮助。这是我想要做的:
SELECT *
FROM Table1
WHERE IsUpdate = CASE WHEN @Type = 'Yes' THEN 1 ELSE (0 OR 1) END
所以基本上,我想在@Type ='是'时只选择将IsUpdate设置为1的行,否则我想选择IsUpdate = 0或IsUpdate = 1的行。任何想法?
答案 0 :(得分:3)
您不需要CASE
,我认为该值只能是0
或1
:
SELECT * FROM Table1
WHERE @Type <> 'Yes' OR IsUpdate = 1
如果它位于存储过程中,最好使用If-Else
而不是参数检查,因为上面的查询是non-sargable,因此在大型表上可能效率低下。
答案 1 :(得分:3)
与您的逻辑匹配的完整where
子句是:
where (@Type = 'Yes' and IsUpdate = 1) or
(@Type <> 'Yes' and IsUpdate in (0, 1))
如果您对列中的值有所了解,可以简化此操作。例如,如果仅IsUpdate
采用值0
和1
(而不是NULL
):
where @Type <> 'Yes' or IsUpdate = 1