2017-11-24 1 views
1

Ich versuche, eine Where-Klausel in SQL Server 2014 mithilfe des folgenden Codes mehrere Kriterien hinzuzufügen, und ich erhalte einen Syntaxfehler.Verwenden einer IIF-Anweisung in einer Where-Klausel

Ich habe eine Case-Anweisung versucht, aber kann nicht funktionieren, basierend auf den Beispielen auf dieser Website.

Where 
iif(ss.DATAAREAID = 'USMF', 
(ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%'), 
(ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

Ich bin sicher, es ist eine schnelle Lösung, aber jede Hilfe wäre willkommen.

+0

@ LasseVågsætherKarlsen - https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql –

+0

Mir egal, muss mein SQL Server Wissen anscheinend aktualisieren . –

Antwort

5

Verwenden Sie keine bedingte Logik. Verwenden Sie einfach Boolesche Ausdrücke:

Where (ss.DATAAREAID = 'USMF', and ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%') or 
     (ss.DATAAREAID <> 'USMF' and ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

Hinweis: iif() ist eine SQL-Server-Funktion, aber es war für die Abwärtskompatibilität zu MS Access eingeführt. Sie sollten statt dessen ANSI-Standard case Ausdrücke verwenden.

Ihre Version funktioniert nicht, da SQL Server das Ergebnis eines booleschen Ausdrucks nicht als gültigen Wert behandelt. Sie würden, so etwas zu tun:

where (case when . . . and . . . then 1 
      else 0 
     end) = 1 

Die oben nimmt nicht NULL Werte berücksichtigt. Diese Bedingung wird bei Bedarf einfach hinzugefügt.

+0

Danke hat super funktioniert. Vielen Dank an alle, die auf meinen Beitrag geantwortet haben – Juni0R

Verwandte Themen