SQL – Clause WHERE différente dépendante de la variable

J'utilise une variable pour que mon SELECT s'exécute dans 2 "modes" différents:

DECLARE @Mode as Varchar(1) = 'A' SELECT CASE WHEN @Mode = 'A' THEN FieldABC * 2 ELSE FieldABC * 3 END AS FieldABC, CASE WHEN @Mode = 'A' THEN FieldDEF ELSE FieldGHI END AS FieldJKL WHERE FieldABC BETWEEN 0 AND 100 

Quand je veux exécuter la version "B" du SELECT, je dois juste changer la valeur de la variable. Tout cela fonctionne très bien.

Je veux maintenant changer la clause WHERE sorte qu'elle dépende aussi de la variable:

 IF @Mode = 'A' THEN WHERE FieldABC > 0 ELSE WHERE FieldABC < 0 END IF 

Sauf, cette syntaxe est totalement absurde en SQL!

Comment puis-je atteindre les 2 différentes saveurs de ma clause WHERE dépendant de la même variable – ou d'une autre façon simple de basculer le SELECT entre les 2 modes différents?

Vous pouvez le faire avec une combinaison de AND et OR :

 WHERE (@Mode='A' AND FieldABC > 0) OR (@Mode='B' AND FieldABC < 0); 

Ou avec une expression CASE :

 WHERE CASE WHEN @Mode = 'A' AND FieldABC > 0 THEN 1 WHEN @Mode = 'B' AND FieldABC < 0 THEN 1 ELSE 0 END = 1;