2012-11-01 11 views
15

Ich muss If-Anweisung innerhalb WHERE-Klausel in SQL verwenden.Wie wird If-Anweisung in Where-Klausel in SQL verwendet?

Select * from Customer 
WHERE ([email protected] OR @ISClose is NULL) 
AND  
(C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
AND 
if (@Value=2) 
    begin 
    ([email protected] or @Total is NULL)  
    end 
else if(@Value=3) 
begin 
(I.RecurringCharge like '%'+cast(@Total as varchar(50))+'%' or @Total is NULL) 
end 

Hinweis: Dies ist nicht der komplette code.Everything in SP.I definiert ist, einfach den Code geschrieben, der nötig war, das Problem zu verstehen.

Vielen Dank im Voraus.

Antwort

6

Sie haben CASE Statement/Expression

Select * from Customer 
WHERE ([email protected] OR @ISClose is NULL) 
AND  
    (C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
AND 
    CASE @Value 
     WHEN 2 THEN (CASE I.RecurringCharge WHEN @Total or @Total is NULL) 
     WHEN 3 THEN (CASE WHEN I.RecurringCharge like 
           '%'+cast(@Total as varchar(50))+'%' 
        or @Total is NULL) 
    END 
+0

ich versuchte gleich, aber ich gab mir eine Fehlermeldung „Falsche Syntax in der Nähe von‚=‘“ auf diese Zeile wenn 1 dann ([email protected] oder @Total ist NULL) –

+0

Ja, es gibt den Fehler an der gleichen Stelle .Ich bin bereits in meinem ursprünglichen SP ausgeführt. –

+0

kann nicht verstehen, was in der Nähe von "=" falsch ist. BTW Danke. –

2

Nto sicher, die RDBMS Sie verwenden, aber wenn es SQL Server ist, könnte man sich eher sehen ein CASE statement

Wertet eine Liste von Bedingungen mit und gibt einen von mehreren möglichen Ergebnis Ausdrücke.

Die CASE Ausdruck hat zwei Formate:

einfachen Fall Ausdruck einen Ausdruck auf einen Satz von einfachen Ausdrücken vergleicht das Ergebnis zu bestimmen.

Der gesuchte CASE-Ausdruck wertet eine Menge boolescher Ausdrücke auf aus, um das Ergebnis zu bestimmen.

Beide Formate unterstützen ein optionales ELSE-Argument.

+0

ich –

+0

eher bei Verwendung einer CASE-Anweisung suchen Sie dann SQL Server verwenden verwenden –

9
SELECT * 
    FROM Customer 
WHERE ([email protected] OR @ISClose is NULL) 
    AND (C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
    AND (isnull(@Value,1) <> 2 
     OR I.RecurringCharge = @Total 
     OR @Total is NULL)  
    AND (isnull(@Value,2) <> 3 
     OR I.RecurringCharge like '%'+cast(@Total as varchar(50))+'%' 
     OR @Total is NULL) 

Im Grunde war Ihr Zustand

if (@Value=2) 
    TEST FOR => ([email protected] or @Total is NULL)  

um blätterte,

AND (isnull(@Value,1) <> 2    -- A 
     OR I.RecurringCharge = @Total -- B 
     OR @Total is NULL)    -- C 

Wenn (A) wahr ist, dh @Value ist nicht 2, [ A oder B oder C] wird unabhängig von B- und C-Ergebnissen TRUE. B und C werden in Wirklichkeit nur überprüft, wenn @Value = 2, was die ursprüngliche Absicht ist.

0
select * from xyz where (1=(CASE WHEN @AnnualFeeType = 'All' THEN 1 ELSE 0 END) OR AnnualFeeType = @AnnualFeeType) 
Verwandte Themen