2009-08-10 5 views
1

Excuses d'avance car j'ai l'impression d'oublier ou de manquer quelque chose d'évident sur celui-ci. Voici; J'utilise une déclaration de cas dans ma clause WHERE, les travaux ci-dessous bien:Affirmation de cas où clause w/an OU

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

Mon « problème » est que je veux ajouter un montant supplémentaire OU clause à mon ELSE block..something comme ceci:

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

Naturellement, ceci génère cette erreur: Syntaxe incorrecte près du mot clé 'OR'. Dans la déclaration ELSE

D'où ma question ... quelle est la logique correcte/alternative que je peux utiliser pour accomplir ceci?
Merci d'avance

Répondre

1

CASE est une expression qui renvoie une valeur. Au lieu de tester par rapport à la seule expression CASE, vous pouvez faire un OU entre deux, que seule la différence est la clause else. (En utilisant IN comme raccourci pour l'écriture SomeOtherCol = ... OR SomeOtherCol =) Vous pouvez faire:

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) 

Je suppose cela a plus logique que vous avez besoin, et si les spécificités de votre situation ont été connus une déclaration beaucoup plus simple et plus claire d'autre pourrait être écrit.

Questions connexes