Je pense que cela pourrait vous être utile.
Utilisation d'un SELECT
avec un simple CASE
expression
Dans un délai de SELECT
une simple déclaration CASE
ne permet qu'une vérification de l'égalité ; aucune autre comparaison n'est effectuée. L'exemple suivant utilise l'expression CASE
expression pour modifier l'affichage des catégories de lignes de produits afin de les rendre plus compréhensibles.
USE AdventureWorks2012;
GO
SELECT ProductNumber, Category =
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;
GO
Utilisation d'un SELECT
avec une déclaration recherchée CASE
expression
Dans un délai de SELECT
la déclaration recherchée CASE
permet de remplacer des valeurs dans le jeu de résultats sur la base de valeurs de comparaison. L'exemple suivant affiche le prix de liste sous forme de commentaire textuel en fonction de la gamme de prix d'un produit.
USE AdventureWorks2012;
GO
SELECT ProductNumber, Name, "Price Range" =
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
FROM Production.Product
ORDER BY ProductNumber ;
GO
Utilisation de CASE
dans un ORDER BY
clause
Les exemples suivants utilisent l'option CASE
dans une expression ORDER BY
pour déterminer l'ordre de tri des lignes en fonction d'une valeur de colonne donnée. Dans le premier exemple, la valeur de la colonne SalariedFlag de la table HumanResources.Employee est évaluée. Les employés dont le SalariedFlag est égal à 1 sont classés par BusinessEntityID dans l'ordre décroissant. Les employés dont la valeur de SalariedFlag est égale à 0 sont renvoyés dans l'ordre croissant de leur BusinessEntityID. Dans le deuxième exemple, le jeu de résultats est ordonné par la colonne TerritoryName lorsque la colonne CountryRegionName est égale à 'United States' et par CountryRegionName pour toutes les autres lignes.
SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO
SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
ELSE CountryRegionName END;
Utilisation de CASE
dans un UPDATE
déclaration
L'exemple suivant utilise le CASE
dans une expression UPDATE
Si la soustraction de 10 heures de la colonne VacationHours donne une valeur négative, VacationHours est augmenté de 40 heures, sinon, VacationHours est augmenté de 20 heures. Le site OUTPUT
La clause est utilisée pour afficher les valeurs avant et après les vacances.
USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours =
( CASE
WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
ELSE (VacationHours + 20.00)
END
)
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue,
Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0;
Utilisation de CASE
dans un HAVING
clause
L'exemple suivant utilise le CASE
dans une expression HAVING
pour restreindre les rangs retournés par la requête SELECT
déclaration. L'instruction renvoie le taux horaire maximum pour chaque titre de poste dans la table HumanResources.Employee. L'adresse HAVING
La clause restreint les titres à ceux qui sont détenus par des hommes dont le taux de rémunération maximal est supérieur à 40 dollars ou par des femmes dont le taux de rémunération maximal est supérieur à 42 dollars.
USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M'
THEN ph1.Rate
ELSE NULL END) > 40.00
OR MAX(CASE WHEN Gender = 'F'
THEN ph1.Rate
ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;
Pour une description plus détaillée de ces exemples, visitez le site source .
Visitez également aquí y aquí pour des exemples très détaillés.