CASE WHEN en SQL Oracle : la logique conditionnelle (exemples)

CASE WHEN en SQL Oracle : la logique conditionnelle (si/alors/sinon) dans vos requêtes. Formes simple et recherchée, usage dans SELECT/ORDER BY, vs DECODE.

Illustration : CASE WHEN en SQL Oracle

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.

Publicité

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 THEN doivent 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 avec WHEN 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.

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Cours SQL & Oracle — 100% gratuitVoir les cours →