L’instruction CASE passe par des conditions et renvoie une valeur lorsque la première condition est remplie (comme une instruction COBOL Evaluate). Ainsi, si une condition est vraie, elle arrêtera de lire et renverra le résultat. Si aucune condition n’est vraie, elle renvoie la valeur dans la clause ELSE.
Si la partie ELSE n’est pas ajoutée dans l’instruction CASE et qu’aucune condition n’est vraie, elle renvoie la valeur NULL.
syntaxe:
CASE
WHEN condition1 THEN resultat1
WHEN condition2 THEN resultat2
WHEN conditionN THEN résultatN
ELSE resultat
END;
Base de données DB2 :
Vous trouverez ci-dessous une sélection de la table “Employé” de la base de données DB2.
ID-Employé | Nom-Employé | Service | Âge | Pays | Ville |
---|---|---|---|---|---|
7001 | robert | ADM | 25 | Inde | Chennai |
7002 | Jancy | HUM | 35 | Amérique | New York |
7003 | Brian | OPE | 40 | Chine | |
7004 | Phil | DES | 50 | Amérique | Boston |
7005 | Carmen | ADM | 47 | Russie | |
7006 | Hélène | OPE | 39 | Angleterre | Londres |
Exemple 1:
Supposons que dans la table “Employé”, le premier caractère d’un numéro de service représente la division de l’organisation. Utilisez une expression CASE pour répertorier le nom complet de la division à laquelle appartient chaque employé.
SELECT ID_Employe, Nom_Employe,
CASE SUBSTR(Service,1,1)
WHEN 'A' THEN 'Administration'
WHEN 'H' THEN 'Resources Humaines'
WHEN 'D' THEN 'Design'
WHEN 'O' THEN 'Operations'
END AS "Departement"
FROM Employe;
Résultat:
ID-Employé | Nom-Employé | Département |
---|---|---|
7001 | robert | Administration |
7002 | Jancy | Ressources humaines |
7003 | Brian | Opérations |
7004 | Phil | Concevoir |
7005 | Carmen | Administration |
7006 | Hélène | Opérations |
Exemple 2 :
L’instruction SQL suivante ordonnera l’employé par Ville. Cependant, si Ville est NULL, alors trier parPays :
SELECT ID_Employe, Nom_Employe, Ville, Pays
FROM Employe
ORDER BY
(CASE
WHEN Ville IS NULL THEN Pays
ELSE Ville
END);
Résultat:
ID-Employé | Nom-Employé | Ville | Pays |
---|---|---|---|
7004 | Phil | Boston | Amérique |
7001 | robert | Chennai | Inde |
7006 | Hélène | Londres | Angleterre |
7002 | Jancy | New York | Amérique |
7003 | Brian | Chine | |
7005 | Carmen | Russie |