2017-11-03 15 views
0

Ich bin mit SQL Server 2016 und ich habe eine Tabelle, die wie folgt aussieht:WHERE-Klausel mit CASE

Create table testA 
(
    ID int not null, 
    OriginalValue int null 
) 

Insert into testA (ID, OriginalValue) 
values (1, 10), (2, 10), (3, 10), 
     (4, 10), (5, 10), (6, null), (7, null) 

I-Wert müssen zeigen, basierend auf

Declare @intExclude int = 1 

Select ID, 
     OriginalValue as OriginalValue 
From testA 
Where 
[email protected] = 1 
Where IsNull(OriginalValue,0) > 0 

[email protected] = 0 
where isnull(Originalvalue,0) = 0 or IsNull(originalvalue,0) > 0 

Wie zeige ich alle Wert wenn Exclude ist 0 und nicht o Record wenn Exclude ist 1 Ich habe Fall auf Where-Klausel versucht, aber ohne Erfolg?

Dank Oded Dror

Antwort

0

die Sie interessieren, ob das für Sie?

Where (@intExclude = 1 
    and IsNull(OriginalValue,0) > 0) OR (@intExclude = 0 
    and (isnull(Originalvalue,0) = 0 or IsNull(originalvalue,0) > 0)); 
0

Ist das, was Sie wollen?

Where (@intExclude = 1 and coalesce(OriginalValue, 0) > 0)) or 
     (@intExclude = 0 and coalesce(Originalvalue, 0) >= 0) 
+0

Danke, Es funktioniert, ich habe auch von Testa Wo IsNull (Originalvalue, 0)! = Fall, wenn @intExclude = 1 Then (wählen 0) Else (wählen Sie 1) Ende –

+0

@OdedDror. . . Sie bevorzugen eigentlich Pankajs Antwort darauf? –

0

Ich denke, Sie dies benötigen:

Declare @intExclude int = 1 

Select ID, OriginalValue 
From testA 
Where (@intExclude = 1 and OriginalValue is not null) 
    or (@intExclude = 0) 
+0

Danke, Es funktioniert, ich habe auch von Testa Wo IsNull (Originalvalue, 0)! = Fall, wenn @intExclude = 1 Then (wählen 0) Else (wählen Sie 1) End –

+0

Ich denke, das Abfrage mit IsNull (OriginalValue, 0) wird fehlschlagen, wenn OriginalValue Null ist, oder? Wie mit IsNull Nullen in Nullen konvertiert, müssen Sie vergleichen mit "ist nicht null" –

+0

Sie sind richtig, aber ich meine Fall 0 berücksichtigt auch nicht den ursprünglichen Wert. Ich werde 0 in die case-Anweisung hinzufügen Danke Oded Dror –

0

Bitte versuchen Sie diese

Where 
(@intExclude = 1 
and IsNull(OriginalValue,0) > 0) or 

(@intExclude = 0 
and isnull(Originalvalue,0) >= 0)