Je suis presque sûr que vous ne pouvez pas faire cela dans le contexte de la déclaration de cas, et je n'ai pas été en mesure de trouver de documentation à ce sujet, mais est-il possible de faire ce qui suit:
SELECT CASE WHEN testValue > 2
THEN testValue(Without Repeating it) ELSE FailValue)
END
FROM Table
Un meilleur exemple plus complet:
Select CASE WHEN (Foo-stuff+bar) > 2
THEN Conditional statement without >2 Else "Fail"
END
FROM TABLE
Je cherche un moyen de créer une sélection sans répéter la requête conditionnelle.
EDIT: En raison d’un mauvais exemple de ma part et du manque de réponses que je cherchais:
testValue = (Table.A / Table.B) * Table.C Table.D
SELECT CASE WHEN testValue > 2
THEN testValue ELSE FailValue)
END
FROM Table
Ainsi
DECLARE @t INT=1
SELECT CASE
WHEN @t>0 THEN
CASE
WHEN @t=1 THEN 'one'
ELSE 'not one'
END
ELSE 'less than one'
END
EDIT: Après avoir examiné la question de plus près, je pense que la meilleure option est de créer une fonction qui calcule la valeur. De cette façon, si vous vous retrouvez avec plusieurs endroits où le calcul doit être effectué, vous n’avez qu’un point pour maintenir la logique.
La requête peut être écrite légèrement plus simplement, comme ceci:
DECLARE @T INT = 2
SELECT CASE
WHEN @T < 1 THEN 'less than one'
WHEN @T = 1 THEN 'one'
ELSE 'greater than one'
END T
Je cherche un moyen de créer une sélection sans répéter la requête conditionnelle.
Je suppose que vous ne voulez pas répéter Foo-stuff+bar
. Vous pouvez mettre votre calcul dans un tableau dérivé:
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a
Une expression de table commune fonctionnerait aussi bien:
WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END
FROM a
En outre, chaque partie de votre commutateur doit renvoyer le même type de données, de sorte que vous devrez peut-être lancer un ou plusieurs cas.
Nous pouvons utiliser l'instruction de cas comme celle-ci
select Name,EmailId,gender=case
when gender='M' then 'F'
when gender='F' then 'M'
end
from [dbo].[Employees]
Nous pouvons aussi le suivre.
select Name,EmailId,case gender
when 'M' then 'F'
when 'F' then 'M'
end
from [dbo].[Employees]