WHERE子句中的IF / Else / CASE语句

时间:2016-10-28 16:30:55

标签: sql tsql case

我从一个名为[tagged]的列中选择记录,并且默认为零 我的问题是当@tagged变量为NULL时,我想要同时选择0,1值。这让我觉得我应该做IF/ELSE,但我的尝试失败了。

---简单的例子:

declare @tagged int = NULL

SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND tagged = @tagged

许多DBA都在推荐CASE子句。 但我知道在哪里添加它需要帮助。

我是否在查询中添加它?

我的微弱尝试是这样的:

SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND (
    CASE @tagged 
    WHEN 0 THEN (tagged = 0) 
    WHEN 1 THEN (tagged = 1)
    ELSE (tagged IN(0,1)
    END
)

1 个答案:

答案 0 :(得分:3)

使用OR条件而不是粗略CASE语句。

SELECT *
FROM   [TableName]
WHERE  datecreated > '2016-01-01'
       AND ( tagged = @tagged
              OR @tagged IS NULL ) 

如果您希望使用CASE解决问题,那么(考虑NULL列中没有tagged个值)

WHERE  datecreated > '2016-01-01'
       AND tagged = CASE
                      WHEN @tagged IS NOT NULL THEN @tagged
                      ELSE tagged
                    END