2016-10-28 4 views
2

Ich wähle Datensätze aus hat eine Spalte namens [getaggt], und es ist standardmäßig auf Null.
Mein Problem ist, wenn die @tagged Variable NULL ist, dann möchte ich beide 0,1 Werte auswählen. Das lässt mich denken, dass ich eine IF/ELSE machen sollte, aber meine Versuche scheitern.IF/Else/CASE-Anweisung in WHERE-Klauseln

--- einfaches Beispiel:

declare @tagged int = NULL 

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

Viele DBAs empfehlen CASE-Klausel. Aber ich brauche Hilfe zu wissen, wo es hinzuzufügen.

Füge ich es in die Abfrage ein?

Mein schwacher Versuch war:


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

A 'CASE' kann in einem' JOIN' [wie gezeigt verwendet werden hier] (http://stackoverflow.com/a/10260297/92546). Eine WHERE-Klausel kann dasselbe Muster verwenden. – HABO

Antwort

3

Verwenden OR Bedingung statt klobig CASE Aussage.

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

Falls suchen Sie es CASE dann mit lösen (wenn man bedenkt gibt es keine NULL Werte in tagged Spalte)

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

Genau das, was ich gesucht habe. In meinem Fall gibt es keine NULL-Werte, daher machte es Sinn, wie Sie die CASE-Struktur formatiert haben. – coffeemonitor

+0

@coffeemonitor - Gald es half dir..ich bevorzuge 'ODER' Bedingung .. Was einfacher und lesbarer ist –