Utiliser des signes de comparaison dans une déclaration de cas SQL
Je suis à la recherche d'un moyen de construire des cas énoncés dans une requête sql de type select à l'aide de moins et de plus de signes. Par exemple, je veux choisir un classement fondé sur une variable:
DECLARE @a INT
SET @a = 0
SELECT CASE
WHEN @a < 3 THEN 0
WHEN @a = 3 THEN 1
WHEN @a > 3 THEN 2
END
J'aimerais écrire comme:
DECLARE @a INT
SET @a = 0
SELECT CASE @a
WHEN < 3 THEN 0
WHEN 3 THEN 1
WHEN > 3 THEN 2
END
...mais SQL ne me laisse pas utiliser le < et > les signes de cette façon. Est-il possible que je peux faire c'est de SQL 2005, ou ai-je besoin pour utiliser le code comme dans le premier.
La raison pour seulement vouloir le code une fois que c'est parce qu'il rendrait le code beaucoup plus lisible et maintenable et aussi parce que je ne suis pas sûr si SQL server devrez exécuter le calcul pour chaque CAS.
Je suis à la recherche d'un VB.NET cas de déclaration equivelent:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
Peut-être qu'il n'est pas possible en SQL et c'est ok, je veux juste confirmer que.
source d'informationauteur Greg
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le SIGNE fonction
Si
@a
est plus petit que 3, alors@a - 3
résultats négatifs de type int, qui SIGNE renvoie -1.Si
@a
est de 3 ou plus, puis SIGNE renvoie 0 ou 1, respectivement.Si la sortie que vous voulez est de 0, 1 et 2, alors vous pouvez vous simplifier encore plus:
À l'aide de
SIGN
comme suggéré par @José Rui Santos semble une belle solution de contournement. Une alternative pourrait être d'attribuer à l'expression d'un alias, utilisez une sous-sélection et test de l'expression (à l'aide de ses alias) dans la sélection externe: