2016-08-04 2 views
1

Ich versuche, CASE für eine WHERE IN Klausel meines Codes in einem Join zu verwenden. Ist das nicht möglich oder ist meine Syntax einfach schlecht? Irgendwelche Vorschläge würden sehr geschätzt werden. Vielen Dank.SQL Server - Verwenden von Groß-/Kleinschreibung in einem Wo IN-Abschnitt eines Joins

LEFT JOIN 
    MyTable ON MyTable.ID = SomeTable.ID 
      AND MyTable.ResultDate IN (CASE 
              WHEN metricid IN ('0040','0015') 
              THEN '('01312016','03312016','06302016')' 
              ELSE '('20160630')' 
             END) 

Ich bin mit SQL Server 2014

+1

'CASE' in T-SQL ist ein ** Ausdruck ** (wie' a + b'), der ** genau einen atomaren Wert ** zurückgeben kann - ein String, ein int, ein datetime - aber es ** kann nicht ** einen String zurückgeben, der als eine Werteliste interpretiert werden muss (für den "IN" -Operator) –

Antwort

1

Sie können nicht, aber Sie können etwas tun:

LEFT JOIN 
    MyTable ON MyTable.ID = SomeTable.ID 
      AND ((metricid IN ('0040','0015') AND MyTable.ResultDate IN ('01312016','03312016','06302016')) OR ((metricid NOT IN ('0040','0015') AND MyTable.ResultDate='20160630'))) 

Es ist hässlich, aber es sollte funktionieren :)

Anoter Ansatz wäre, Abfragen zu haben und eine UNION zu machen. Also, der erste filtert nach metricid IN ('0040', '0015') und führt einen LEFT JOIN zu MyTable basierend auf ResultDate IN ('01312016', '03312016', '06302016'). Und der andere filtert nach metricid NOT IN.

+0

Einverstanden, sieht nicht gut aus, aber es funktioniert! Vielen Dank. Vielleicht wird SQL 2032 etwas brauchbareres haben –