2017-01-30 2 views
0

Ich versuche, eine Wenn-Bedingung innerhalb einer Where-Klausel setzen und ich kann nicht die richtige Syntax für das, was ich will.SQL Server: IF-Bedingung in Where-Klausel

Die Logik sollte sein, wenn eine bestimmte Periode gleich einer bestimmten Zahl ist, dann überprüfen Sie, ob pdftype nicht Null ist, sonst überprüfen Sie nicht alles.

Hier ist, was ich bisher:

where 
    g.ReportInstanceID = blah 
    and rcr.FormID = blah 
    and rcr.FormSectionID = blah 
    and rcr.SubSectionID = blah 
    and CASE rcr.DataCollectionPeriodID 
      WHEN 163 THEN (PDFType IS NOT NULL) 
     END 
+0

ich mehrere Bedingungen mit 'OR' in Antwort wie unten dargestellt verwenden würde, aber Sie können' CASE' verwenden in 'WHERE':' UND CASE WHEN rcr.DataCollectionPeriodID = 163 DANN PDFType ELSE 'X' ENDE IST NICHT NULL ' –

+0

[This] (http://stackoverflow.com/a/10260297/92546) Antwort zeigt, wie ein CASE-Ausdruck in einer ON-Klausel verwendet werden kann. Das Gleiche gilt für eine WHERE-Klausel. – HABO

Antwort

5

Das ist nicht, wie die CASE-Anweisung funktioniert. Ich denke, das tut, was Sie wollen:

where g.ReportInstanceID = blah 
    and rcr.FormID = blah 
    and rcr.FormSectionID = blah 
    and rcr.SubSectionID = blah 
    and (
      (rcr.DataCollectionPeriodID = 163 and PDFType IS NOT NULL) 
      or rcr.DataCollectionPeriodID <> 163 
     ) 
+0

perfekt danke! –

2

Versuchen Sie folgendes:

. . . 
AND CASE when rcr.DataCollectionPeriodID = 163 THEN 
    case when PDFType is not null then 1 else 0 end 
    else 1 END = 1