Étiqueter les lignes
CASE évalue les conditions de haut en bas et renvoie la première vraie : l'ordre compte, placez la plus spécifique en premier. Ajoutez toujours un ELSE, sinon les lignes non couvertes valent NULL et disparaissent des regroupements.
SELECT id, montant,
CASE
WHEN montant >= 1000 THEN 'Grande'
WHEN montant >= 200 THEN 'Moyenne'
ELSE 'Petite'
END AS taille_commande
FROM commandes;Totaux conditionnels en une requête
Placer CASE dans SUM produit une colonne par statut ou par année, sans fonction de pivot. C'est l'équivalent SQL de SOMME.SI.ENS, valable sur tous les moteurs. PostgreSQL propose aussi la clause plus courte FILTER (WHERE ...).
SELECT client_id,
SUM(CASE WHEN statut = 'payee' THEN montant ELSE 0 END) AS payees,
SUM(CASE WHEN statut = 'en_attente' THEN montant ELSE 0 END) AS en_attente,
COUNT(CASE WHEN statut = 'remboursee' THEN 1 END) AS remboursements
FROM commandes
GROUP BY client_id;Trier selon une priorité métier
L'ordre alphabétique correspond rarement au travail d'une équipe. Associez chaque valeur à un rang dans ORDER BY pour afficher les tickets urgents d'abord.
SELECT * FROM tickets
ORDER BY CASE priorite
WHEN 'urgente' THEN 1
WHEN 'haute' THEN 2
WHEN 'normale' THEN 3
ELSE 4 END, cree_le;Erreurs fréquentes
CASE WHEN col = NULL ne correspond jamais : utilisez IS NULL. Toutes les branches doivent renvoyer des types compatibles. Évitez enfin de répéter un long CASE dans SELECT, GROUP BY et ORDER BY : calculez-le une fois dans une CTE et réutilisez l'alias. Décrivez vos catégories en une phrase et FormulAI écrit le CASE pour votre moteur.

