Requête SELECT CASE WHEN en T-SQL pour gérer les conditions

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.

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 :

  1. Alimentaire
  2. Electronique
  3. Mobilier
  4. Hygiène
  5. 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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*