Je fais ce tutoriel car j'ai vu qu'il y avait plein de questions à ce sujet et je n'ai pas vu de tutoriels là-dessus sur ce site à moins que je n'ai pas bien vu ou regardé...
Donc j'écris ce tutoriel pour les débutants qui ne savent pas se servir de CASE et WHEN...
Ce tutoriel me servira aussi de référence sur le forum donc si quelque chose n'est pas vrai ou vous choque n'hésitez pas à poster un commentaire, je ne voudrais pas induire les débutants en erreurs !
CASE est un mot réservé en SQL. En fait, c'est une sorte de boucle qui contient des conditions représentées par le mot réservé WHEN. Si cette condition est vraie, on a un autre mot réservé THEN qui est placé après la condition et après ce mot on a le résultat souhaité...
WHEN représente une condition, et dans une boucle CASE, on peut avoir autant de conditions que l'on veut !
THEN représente le résultat qui doit être retourné si la condition est vraie !
Le fameux ELSE retourne ce qui est placé après lui au cas ou aucune des conditions représentées par les WHEN n'est vraies !
Une boucle CASE se finit toujours par le mot réservé END !
Voici comment se présente généralement une boucle CASE :
SELECT france, resultat, CASE WHEN 'france' = 3THEN 'La france a marqué 3 buts' WHEN 'france' = 0 THEN 'La france a marqué 0 but' WHEN 'france' < 5 THEN 'La france a marqué moins de 5 buts' WHEN 'france' > 5 THEN 'La france a marqué plus de 5 buts' ELSE 'Résultat inconue !' END AS 'resultat' FROM match;
Dans cet exemple :
Suite à la remarque de nhervagault, je rajoute une explication sur l'utilisation très peu connue des CASE et des WHEN avec GROUP BY et ODER BY...
Donc je pense que le plus simple pour vous et pour moi est de vous montrer un exemple et de l'expliquer...
SELECT * FROM table ORDER BY CASE WHEN@variable = 1 THEN colone1 WHEN@variable = 2THEN colone2 WHEN @variable = 3 THEN colone3 END
C'est exactement pareil pour le GROUP BY...
Dans cet exemple :
Et ce qui se trouve derrière le THEN c'est le nom de la colonne avec laquelle on va trier les résultat...
Très bonne question. Si deux conditions ou plus sont vraies, c'est le résultat de la première condition vraie qui sera retourné et on sortira de la boucle. Sinon ce qui est après le ELSE sera retourné !
Ce comportement est le même sous SQL server 2005 et et Mysql, j'ai fais les tests pour mysql et casy s'est chargé des tests sous SQL Server 2005. D'ailleurs, je remercie casy pour sa question sur le forum car elle m'a donné envie de me remettre au SQL, au vrai avec les Procédure stocké, etc...
Si vous pouvez faire des test sur d'autre SGBD ce serait avec plaisir que je rajouterai le comportement ici !
Bonne lecture et ne vous gênez pas pour mettre des commentaires !
Si vous avez des idées pour étendre ce tutoriel, mettez les aussi !
a++