Exemples de requêtes SELECT CASE WHEN en T-SQL pour gérer les conditions depuis les valeurs des colonnes.
La requête SELECT CASE WHEN en T-SQL est utilisée pour effectuer des tests sur une colonne de données et renvoyer différentes valeurs en fonction des résultats de ces tests. Cette requête est particulièrement utile lorsque vous voulez afficher des données de manière conditionnelle dans une requête SELECT. Voici donc comment utiliser la requête SELECT CASE WHEN en T-SQL.
Table of Contents
1. Créer la table des produits et écrire une requête SELECT
Voici comment créer la table « produits » et insérer des lignes en utilisant T-SQL. Pour créer la table « produits », utilisez la commande CREATE TABLE suivie de la définition de la table et de ses colonnes.
CREATE TABLE dbo.Produits ( id INT PRIMARY KEY, Nom_Produit NVARCHAR(255), Categorie_Produit INT, Prix DECIMAL(10, 2) );
Les commandes ci-dessous permettent d’insérer des lignes dans la table des produits.
INSERT INTO produits (id, Nom_Produit, Code_Categorie , Prix) VALUES (1, 'Banane', 1, 1.39), (2, 'Ordinateur', 2, 899.99), (3, 'Livre', 3, 12.99); INSERT INTO produits (id, Nom_Produit, Code_Categorie , Prix) VALUES (4, 'Téléviseur', 2, 599.99), (5, 'Aspirateur', 2, 299.99), (6, 'Cafetière', 2, 89.99), (7, 'Poulet', 1, 7.99), (8, 'Pommes', 1, 1.69), (9, 'Pâtes', 1, 1.99); INSERT INTO produits (id, Nom_Produit, Code_Categorie , Prix) VALUES (10, 'Lave-vaisselle', 2, 399.99), (11, 'Four micro-ondes', 2, 99.99), (12, 'Lit double', 3, 399.99), (13, 'Canapé', 3, 499.99), (14, 'Veste', 4, 99.99), (15, 'Plante', 4, 199.99);
Ecrire ensuite votre requête SELECT comme d’habitude, en sélectionnant les colonnes que vous souhaitez afficher et en spécifiant la source de données à partir de laquelle vous souhaitez sélectionner les données.
2. Construire la clause CASE WHEN
Ensuite, utilisez la clause CASE WHEN pour effectuer un test sur une colonne de données. Voici la syntaxe générale de cette clause. Voici un exemple simple générique d’utilisation du SELECT CASE WHEN avec SQL Server:
SELECT CASE WHEN condition-1 THEN resultat-1 WHEN condition-2 THEN resultat-2 WHEN condition-3 THEN resultat-3 ELSE resultat-4 END
3. Finir la clause CASE par le mot END
La clause CASE WHEN commence par la mot-clé « CASE » et se termine par la mot-clé « END ». Entre ces deux mots-clés, vous pouvez inclure plusieurs « WHEN condition THEN result » pour effectuer plusieurs tests et renvoyer différentes valeurs en fonction des résultats de ces tests. Si aucune des conditions n’est vraie, vous pouvez utiliser la clause « ELSE result » pour renvoyer une valeur par défaut.
4. Exemple concret dans une requête T-SQL
Par exemple, supposez que vous avez une table de produits avec une colonne « catégorie » qui peut prendre les valeurs « alimentaire », « électronique » ou « autre ». Vous pouvez utiliser la requête SELECT CASE WHEN pour afficher la colonne « catégorie » sous forme de texte lisible par l’homme au lieu de l’identifiant numérique utilisé en interne.
Voici par exemple les 4 valeurs possible pour notre requête :
- Alimentaire
- Electronique
- Mobilier
- Hygiène
- Autre
SELECT Nom_Produit, CASE WHEN Code_Categorie = 1 THEN 'Alimentaire' WHEN Code_Categorie = 2 THEN 'Electronique' WHEN Code_Categorie = 3 THEN 'Mobilier' WHEN Code_Categorie = 4 THEN 'Hygiène' ELSE 'Autre' END AS Categorie_Produit FROM dbo.Produits;
Cette requête affichera donc la colonne Nom_Produit et une colonne Categorie_Produit qui affichera Alimentaire pour les produits de la catégorie alimentaire, Electronique pour les produits de la catégorie électronique, etc. Et enfin « Autre » pour tous les autres produits. C’est à dire les produits sans catégorie.
5. CASE WHEN combiné avec une requête WHERE
Vous pouvez également utiliser la requête SELECT CASE WHEN dans d’autres clauses de requête, comme la clause WHERE ou la clause GROUP BY.
Par exemple, vous pouvez utiliser la clause WHERE pour filtrer les résultats de votre requête en fonction de la valeur de la colonne Code_Categorie. Cette requête ne retournera donc que les produits de la catégorie « alimentaire ».
SELECT Nom_Produit, CASE WHEN Code_Categorie = 1 THEN 'Alimentaire' WHEN Code_Categorie = 2 THEN 'Electronique' WHEN Code_Categorie = 3 THEN 'Mobilier' ELSE 'Autre' END AS Categorie_Produit WHERE Code_Categorie = 1;
6. Exemple de CASE WHEN avec un GROUP BY
Vous pouvez également utiliser la clause GROUP BY pour regrouper les résultats de votre requête en fonction de la valeur de la colonne « categorie » :
SELECT Nom_Produit, CASE WHEN Code_Categorie = 1 THEN 'Alimentaire' WHEN Code_Categorie = 2 THEN 'Electronique' WHEN Code_Categorie = 3 THEN 'Mobilier' WHEN Code_Categorie = 4 THEN 'Hygiène' ELSE 'Autre' END AS Categorie_Produit, COUNT(*) AS Nombre_Produits FROM dbo.Produits GROUP BY Code_Categorie;
7. Requête CASE pour afficher le nom du mois à partir du numéro
Cette requête retournera le nombre de produits dans chaque catégorie, affiché sous forme de texte lisible par l’homme au lieu de l’identifiant numérique utilisé en interne. Supposons que vous avez une table « ventes » avec une colonne « mois » qui contient le numéro du mois (de 1 à 12).
Vous pouvez utiliser la requête SELECT CASE WHEN pour afficher le nom du mois au lieu du numéro. Cette requête affichera l’année, le nom du mois et le total des ventes pour chaque mois.
SELECT Annee, CASE WHEN mois = 1 THEN 'Janvier' WHEN mois = 2 THEN 'Février' WHEN mois = 3 THEN 'Mars' WHEN mois = 4 THEN 'Avril' WHEN mois = 5 THEN 'Mai' WHEN mois = 6 THEN 'Juin' WHEN mois = 7 THEN 'Juillet' WHEN mois = 8 THEN 'Août' WHEN mois = 9 THEN 'Septembre' WHEN mois = 10 THEN 'Octobre' WHEN mois = 11 THEN 'Novembre' WHEN mois = 12 THEN 'Décembre' ELSE 'erreur' END AS Mois, SUM(montant) AS Total_Ventes FROM dbo.Ventes GROUP BY Annee Mois;
8. Conclusion sur la requête SELECT CASE WHEN en T-SQL
Voilà, vous savez maintenant comment utiliser la requête SELECT CASE WHEN en T-SQL pour afficher des données de manière conditionnelle dans une requête SELECT. N’hésitez pas à jouer avec cette requête et à la combiner avec d’autres clauses pour créer des requêtes plus complexes.
Soyez le premier à commenter