2016-10-28 15 views
2

[タグ付き]という列を持つレコードを選択していますが、デフォルトではゼロに設定されています。
@tagged変数がNULLの場合は、両方とも0,1の値を選択したい場合があります。これは私がIF/ELSEをやっていなければならないと思うが、私の試みは失敗している。WHERE句のIF/Else/CASEステートメント

---簡単な例:

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'に使用することができる(taggedカラムにはNULL値がない考慮して)、次いでCASEを使用してそれを解決しようとしていますここに](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) 

あなたは[

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

まさに私が探していたもの。私の場合はNULL値がないので、CASE構造をどのようにフォーマットしたのかが分かりました。 – coffeemonitor

+0

@coffeemonitor - それはあなたを助けました..私は 'OR'条件を好む..簡単で読みやすい –