Je pense que cela pourrait vous être utile.
Utiliser une SELECT
instruction avec une CASE
expression simple
Dans une SELECT
instruction, une CASE
expression simple permet uniquement un contrôle d'égalité; aucune autre comparaison n'est faite. L'exemple suivant utilise l' 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'une SELECT
instruction avec une CASE
expression recherchée
Dans une SELECT
instruction, l' CASE
expression recherchée permet de remplacer les valeurs dans l'ensemble de résultats en fonction des valeurs de comparaison. L'exemple suivant affiche le prix catalogue sous forme de commentaire textuel en fonction de la fourchette 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 CASE
dans une ORDER BY
clause
Les exemples suivants utilisent l' CASE
expression dans une ORDER BY
clause 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 défini sur 1 sont renvoyés dans l'ordre par BusinessEntityID dans l'ordre décroissant. Les employés dont le SalariedFlag est défini sur 0 sont renvoyés dans l'ordre par BusinessEntityID dans l'ordre croissant. Dans le deuxième exemple, le jeu de résultats est trié 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 CASE
dans une UPDATE
déclaration
L'exemple suivant utilise l' CASE
expression dans une UPDATE
instruction pour déterminer la valeur qui est définie pour la colonne VacationHours pour les employés avec SalariedFlag défini sur 0. Lorsque la soustraction de 10 heures à VacationHours donne une valeur négative, VacationHours est augmenté de 40 heures; sinon, VacationHours est augmenté de 20 heures. La OUTPUT
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 CASE
dans une HAVING
clause
L'exemple suivant utilise l' CASE
expression dans une HAVING
clause pour restreindre les lignes renvoyées par l' SELECT
instruction. L'instruction renvoie le taux horaire maximal pour chaque titre de poste dans la table HumanResources.Employee. La HAVING
clause limite les titres à ceux qui sont détenus par des hommes avec un taux de rémunération maximum supérieur à 40 dollars ou par des femmes avec un taux de rémunération maximum 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 plus de détails sur la description de ces exemples, visitez la source .
Visitez également ici et ici pour quelques exemples avec de grands détails.