2016-10-28 202 views
2

我從包含名爲[tagged]的列中選擇記錄,並且它默認爲零。
我的問題是當@tagged變量是NULL,那麼我想同時選擇0,1值。這讓我覺得我應該做一個IF/ELSE,但我的嘗試失敗了。IF/Else/CASE語句在WHERE子句中

---簡單的例子:

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 
) 
+0

甲'CASE'可以在'JOIN'被用作示出[這裏](http://stackoverflow.com/a/10260297/92546)。一個'WHERE'子句可以使用相同的模式。 – HABO

回答

3

使用OR條件,而不是笨重的CASE聲明。

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

如果你正在尋找它使用CASE然後求解(考慮有在tagged列沒有NULL值)

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

正是我在找的東西。在我的情況下,沒有NULL值,所以它是如何格式化CASE結構是有意義的。 – coffeemonitor

+0

@coffeemonitor - Gald它幫助你..我更喜歡'OR'條件..這是簡單和更具可讀性 –