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;