2009-08-10 7 views
1

Entschuldigung im Voraus, da ich das Gefühl habe, dass ich auf diesem einen offensichtlich etwas vergesse/vermisse. Hier geht; Ich bin eine case-Anweisung in meiner WHERE-Klausel verwendet wird, arbeitet die folgenden fein:Fallanweisung in where clausel w/an ODER

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol = 
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN 
@SomeVal 
    WHEN... 
... 
    ELSE 
@SomeVal 
END 

Mein „Problem“ ist, dass ich eine zusätzliche OR-Klausel meiner ELSE block..something wie diese hinzufügen möchten:

Natürlich löst dies diesen Fehler aus: Falsche Syntax in der Nähe des Schlüsselwortes 'ODER'. innerhalb der ELSE-Anweisung

Daher meine Frage ... Was ist die richtige/alternative Logik, die ich verwenden kann, um dies zu erreichen?
Vielen Dank im Voraus

Antwort

1

CASE ist ein Ausdruck, der einen Wert zurückgibt. Anstatt einen Test gegen die einzelne Anweisung auszuführen, könnten Sie ein ODER zwischen zwei machen, der einzige Unterschied ist die else-Klausel. (Mit IN als Abkürzung für das Schreiben SomeOtherCol = ... OR SomeOtherCol =) Sie können tun:

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol in 
    (CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal END, 
    CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal - 1 END) 

Meine Vermutung ist, diese mehr Logik hat, als Sie brauchen, und wenn die Besonderheiten Ihrer Situation eine viel einfachere und klarere sonst Aussage bekannt waren, könnten geschrieben.