Je cherche un moyen de construire des déclarations de cas dans une requête SQL Select en utilisant des signes inférieurs à et supérieurs à. Par exemple, je souhaite sélectionner un classement basé 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
Je voudrais l'é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 les signes <et> de cette façon. Existe-t-il un moyen de le faire est SQL 2005, ou dois-je utiliser le code comme dans le premier.
La raison de ne vouloir le code qu'une seule fois est parce que cela rendrait le code beaucoup plus lisible/maintenable et aussi parce que je ne sais pas si le serveur SQL devra exécuter le calcul pour chaque instruction CASE.
Je recherche un équivalent de déclaration de cas VB.NET:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
Peut-être que ce n'est pas possible en SQL et c'est ok, je veux juste le confirmer.
Vous pouvez utiliser la fonction SIGNE comme
DECLARE @a INT
SET @a = 0
SELECT CASE SIGN(@a - 3)
WHEN -1 THEN 0
WHEN 0 THEN 1
WHEN 1 THEN 2
END
Si @a
est inférieur à 3, puis @a - 3
donne un entier négatif, dans lequel SIGN renvoie -1.
Si @a
est égal ou supérieur à 3, puis SIGN renvoie respectivement 0 ou 1.
Si la sortie souhaitée est 0, 1 et 2, vous pouvez simplifier encore plus:
DECLARE @a INT
SET @a = 0
SELECT SIGN(@a - 3) + 1
Utiliser SIGN
comme suggéré par @Jose Rui Santos semble une solution de contournement intéressante. Une alternative pourrait être d'affecter l'expression un alias, d'utiliser une sous-sélection et de tester l'expression (en utilisant son alias) dans la sélection externe:
SELECT
…,
CASE
WHEN expr < 3 THEN …
WHEN expr > 3 THEN …
END AS …
FROM (
SELECT
…,
a complex expression AS expr
FROM …
…
)
SELECT
CASE
WHEN ColumnName >=1 and ColumnName <=1 THEN 'Fail'
WHEN ColumnName >=6 THEN 'Pass'
ELSE 'Test'
END
FROM TableName