web-dev-qa-db-fra.com

SQL Server - Instruction de cas

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 
20
Elias

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.

20

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
19
Gidil

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.

2
Tim Lehner

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]
0
Debendra Dash