2012-03-31 10 views
0

Ich möchte Case in SQL-Anweisung WHERE-Klausel verwenden, aber ich habe ein Problem, wie ich eine Where-Klausel-Bedingung auf der Grundlage von einigen Wert erstellen möchte und ich möchte nicht in Klausel Werte auf der Grundlage esSwitch Fall in Where-Klausel (SQL-Server)

hier ist die Abfrage, wo bin vor ein Problem

WHERE CODE = 'x' and 
    ID not in (
     case 
     when 'app'='A' then '570','592' 
     when 'Q' then ID 592,90 
     else 592,90 
     END 

aber es ist nicht Syntax

+2

Aber es ist keine Frage. – wildplasser

+1

Wenn "app" eine Spalte in der Tabelle ist, sollte sie nicht in einfachen Anführungszeichen stehen. – Ankit

Antwort

1

Sie es in die SQL einbetten könnte, wo Klauseln wie folgt aus:

WHERE CODE='x' and (('app' = 'A' AND ID not in ('570', '592')) OR 
('app' = 'Q' AND ID not in ('592','90')) OR ('app' != 'A' AND 'app' != 'Q' AND ID not in ('592','90')) 

Oder so etwas. Gruseliger Code, also würde ich vorschlagen, verschiedene Abfragen für verschiedene Arten von "app" -Parametern zu verwenden oder eine gespeicherte Prozedur zu erstellen, um Ihre Anforderungen zu erfüllen.

1

Als 592 ist immer Teil des Satzes, und das „Q“ Fall ist die gleiche wie die standardmäßig tun wie folgt aus:

where CODE = 'x' and ID not in (592, case app when 'A' then 570 else 90 end) 
1

Bedenken Sie, dass Sie zu kombinieren, können versuchen, was eigentlich sein sollte separate Aussagen.

Sie können eine Testbedingung in Betracht ziehen (vielleicht über eine einfache IF-Anweisung), um festzustellen, welche spezifische T-SQL-Anweisung tatsächlich ausgeführt wird.

Pseudo-Code:

IF (/*Conditions are True*/) 
BEGIN 
    --SQL Statement 
END 
ELSE IF (/*Some other conditions are True) 
BEGIN 
    --SQL Statement 
END 
ELSE 
BEGIN 
    --Failsafe SQL statement 
END 

Die logische Absicht des Codes viel einfacher hergestellt werden, zu verstehen und warten nach vorne gehen.

Verwandte Themen