2016-06-08 13 views
2

Ich versuche, eine Abfrage zu erhalten, die die folgenden tut:MSSQL WHERE mit IF

SELECT * FROM Test 
WHERE 
IF Condition = True 
    Column1 = 'This' 
    Column2 = 'That' 
ELSE 
    Column3 = 'This' 
    column4 = 'That' 

Das einzige, was ich mit Wenn Bedingungen in eine finden können, wo Klausel FÄLLE sind. Ich konnte kein Beispiel finden, das Fälle für mehrere Bedingungen zulässt.

Bisher musste ich dies erreichen, indem ich das If außerhalb der SELECT-Anweisung hatte und die Anweisung duplizierte, aber die WHERE-Klausel änderte.

+1

Bitte klären Sie, ob der Operator '=' eine Zuweisung oder ein Gleichheitstest ist, und geben Sie ein Beispiel 'Condition' an. – Dai

Antwort

5
SELECT * FROM Test 
WHERE 
(Condition = True 
    AND Column1 = 'This' 
    AND Column2 = 'That') 
OR 
(Condition = FALSE 
    AND Column3 = 'This' 
    AND column4 = 'That') 
+0

Danke. Scheint sehr offensichtlich, wenn Sie vor Ihnen stehen! – Zac

1

können Sie PROCEDURE oder FUNCTION verwenden, um dies zu tun.

Zum Beispiel mit VERFAHREN:

CREATE PROCEDURE test (IN _condition BOOLEAN, IN _this VARCHAR(255), IN _that VARCHAR(255)) 
BEGIN 
    IF _condition THEN 
     SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that; 
    ELSE 
     SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that; 
    END IF; 
END; 

dies ausführen zu können, führen Sie einfach CALL test(TRUE, 'This', 'That')

Sie _condition mit Ihrem eigenen Zustand ersetzen können, zum Beispiel:

CREATE PROCEDURE test1 (IN _number INT(11), IN _this VARCHAR(255), IN _that VARCHAR(255)) 
BEGIN 
    IF _number >= 2016 THEN 
     SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that; 
    ELSE 
     SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that; 
    END IF; 
END; 

und ausführen CALL test1(2015, 'This', 'That')