
L’expression CASE en SQL Oracle permet d’appliquer une logique conditionnelle (« si… alors… sinon… ») directement dans une requête. C’est l’équivalent du if/else en SQL : indispensable pour catégoriser des données, calculer des colonnes conditionnelles ou trier intelligemment. Voici les deux formes de CASE, avec des exemples concrets.
Les deux formes de CASE
1. CASE « simple » (comparaison d’une valeur)
SELECT nom,
CASE statut
WHEN 'A' THEN 'Actif'
WHEN 'I' THEN 'Inactif'
ELSE 'Inconnu'
END AS libelle_statut
FROM clients;2. CASE « recherché » (conditions libres)
Le plus puissant : chaque branche est une condition complète.
SELECT nom, montant,
CASE
WHEN montant >= 10000 THEN 'VIP'
WHEN montant >= 1000 THEN 'Premium'
ELSE 'Standard'
END AS segment
FROM commandes;Les conditions sont évaluées dans l’ordre : la première vraie l’emporte. Le ELSE est optionnel (sinon NULL par défaut).
CASE dans différentes clauses
Dans le SELECT (colonne calculée)
Le cas vu ci-dessus : créer une colonne dérivée.
Dans ORDER BY (tri personnalisé)
SELECT * FROM tickets
ORDER BY CASE priorite
WHEN 'haute' THEN 1 WHEN 'moyenne' THEN 2 ELSE 3 END;Dans une agrégation (pivot conditionnel)
SELECT
SUM(CASE WHEN annee = 2025 THEN montant ELSE 0 END) AS ca_2025,
SUM(CASE WHEN annee = 2026 THEN montant ELSE 0 END) AS ca_2026
FROM ventes;Cette technique « SUM + CASE » est la base du pivot manuel — voir aussi notre article PIVOT et UNPIVOT Oracle.
CASE vs DECODE
Oracle propose aussi DECODE, plus ancien. Différences :
- CASE est standard SQL, plus lisible, gère les conditions complexes (
>,BETWEEN,IN…). - DECODE est propre à Oracle et ne fait que des égalités.
👉 Préférez CASE dans le code moderne.
Pièges à éviter
- Types cohérents : toutes les branches
THENdoivent renvoyer un type compatible (sinon erreur de conversion type ORA-01722). - NULL :
CASE x WHEN NULL THEN…ne marche jamais (NULL ≠ NULL). Utilisez la forme recherchée avecWHEN x IS NULL THEN…. - Ordre des conditions : placez les plus spécifiques en premier.
FAQ
Peut-on imbriquer des CASE ?
Oui : une branche THEN peut contenir un autre CASE. À utiliser avec parcimonie pour rester lisible.
CASE fonctionne-t-il dans WHERE ?
Oui, mais c’est rarement nécessaire : une condition WHERE classique (avec AND/OR) est plus lisible. CASE dans WHERE sert surtout pour des logiques très conditionnelles.
Quelle différence entre CASE et IF ?
IF existe en PL/SQL (langage procédural), pas en SQL pur. Dans une requête SQL, c’est CASE qu’on utilise.
