L'instruction SQL CASE est très puissante et polyvalente. Il peut être utilisé dans les instructions SELECT, UPDATE et INSERT. Même il peut être utilisé dans les clauses ORDER BY et GROUP BY. Examinons-les un par un.
Syntaxe
Vérifiez d'abord la syntaxe de l'instruction CASE :
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END;
Préparation des données
Choisissez d'abord votre base de données préférée et exécutez les requêtes ci-dessous pour créer une table "Personnes" et la remplir avec des données.
IF OBJECT_ID('Persons', 'U') IS NOT NULL DROP TABLE Persons; GO CREATE TABLE Persons( name varchar(20) ,age int ,sex varchar(2) ) GO INSERT INTO Persons (name,age,sex) values('Bob',5, 'M'); INSERT INTO Persons (name,age,sex) values('Harry',15, 'M'); INSERT INTO Persons (name,age,sex) values('Jasmine',25, 'F'); INSERT INTO Persons (name,age,sex) values('Fanny',65, 'F'); INSERT INTO Persons (name,age,sex) values('Evan',-1, 'N'); GO
Instruction SELECT
Utilisons-le dans notre instruction SELECT.
SELECT Name, age as 'Actual Age', CASE WHEN age >= 0 AND age <= 12 THEN 'CHILD' WHEN age >= 13 AND age <= 19 THEN 'TEEN AGE' WHEN age >= 20 AND age <= 40 THEN 'YOUNG' WHEN age >= 41 AND age <= 60 THEN 'MIDDLE AGE' WHEN age >= 61 THEN 'OLD' ELSE 'NOT DEFINED' END as 'New Age using CASE Stmt', sex as 'Actual Gender', CASE WHEN sex = 'M' THEN 'MALE' WHEN sex = 'F' THEN 'FEMALE' WHEN sex = 'N' THEN 'DONT WANT TO DISCLOSE' END as 'New Gender using CASE Stmt' FROM Persons
Sortie
INSÉRER la déclaration
DECLARE @age INT DECLARE @sex VARCHAR(10) SET @age = 40 SET @sex = 'MALE' INSERT INTO Persons (Name, Age, Sex) VALUES( 'Jack', CASE WHEN @age < 0 THEN -1 ELSE @age END, CASE WHEN @sex = 'MALE' THEN 'M' WHEN @sex = 'FEMALE' THEN 'F' ELSE 'N' END )
Sortie
Si nous exécutons à nouveau notre première instruction SELECT, la sortie serait :
Déclaration de MISE À JOUR
DECLARE @age INT SET @age = -4 UPDATE Persons SET age = CASE WHEN @age < 0 THEN -1 ELSE @age END WHERE Name = 'Bob'
Sortie
Si nous exécutons à nouveau l'instruction SELECT ci-dessus, la sortie serait :
Clause ORDRE PAR
CASE can be added in ORDER BY clause in above SELECT statement SELECT Name, age as 'Actual Age', CASE WHEN age >= 0 AND age <= 12 THEN 'CHILD' WHEN age >= 13 AND age <= 19 THEN 'TEEN AGE' WHEN age >= 20 AND age <= 40 THEN 'YOUNG' WHEN age >= 41 AND age <= 60 THEN 'MIDDLE AGE' WHEN age >= 61 THEN 'OLD' ELSE 'NOT DEFINED' END as 'New Age using CASE Stmt', sex as 'Actual Gender', CASE WHEN sex = 'M' THEN 'MALE' WHEN sex = 'F' THEN 'FEMALE' WHEN sex = 'N' THEN 'DONT WANT TO DISCLOSE' END as 'New Gender using CASE Stmt' FROM Persons ORDER BY CASE WHEN sex='M' THEN age END, CASE WHEN sex='F' THEN Name END
Sortie
Clause GROUPER PAR
Il est maintenant temps d'explorer CASE dans la clause GROUP BY dans notre première instruction SELECT :
SELECT CASE WHEN age <= 40 THEN 'YOUNG' WHEN age >= 41 THEN 'OLD' END as 'New Age using CASE Stmt', COUNT(*) FROM Persons GROUP BY CASE WHEN age <= 40 THEN 'YOUNG' WHEN age >= 41 THEN 'OLD' END
Sortie
Nous avons couvert tous les cas de notre sujet CASE d'aujourd'hui.
Rester à la maison! Restez en sécurité !
Il a été publié pour la première fois sur mon blog.