SQL Server a la capacité unique de vous permettre d’exécuter une logique programmatique en temps réel sur les valeurs de votre requête. Sur la base de ces évaluations logiques, vous pouvez générer diverses valeurs dans le cadre de l’ensemble de données retourné.
Utilisation de l’instruction CASE
Ceci est le plus facilement accompli dans toutes les versions de SQL Server en utilisant l’instruction CASE
, qui agit comme une IF...THEN...ELSE
expression logique et renvoie diverses valeurs en fonction du résultat.
Dans l’exemple ci-dessous, nous voulons retourner une colonne supplémentaire locale
qui précise si notre livre se déroule en Terre du Milieu ou sur la vieille Terre ordinaire.
SELECT CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth' END AS locale, books.*FROM books
Avant d’examiner l’aspect particulier CASE
de cette déclaration, supprimons temporairement la CASE
pour remarquer qu’il s’agit d’une déclaration SELECT
extrêmement simple en surface :
SELECT books.*FROM books
En conséquence, examinons comment la section CASE
est structurée et quel comportement logique nous effectuons.
CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth'END AS locale
Pour commencer, nous de initialiser l’instruction CASE
puis de spécifier sous quelles conditions (WHEN
) notre instruction CASE
doit évaluer un résultat. Dans cet exemple, nous examinons les champs books.title
et books.primary_author
; si l’un ou l’autre correspond à notre thème Tolkien-esque, THEN
nous retournons la valeur » Terre du Milieu « . Si aucun des deux champs ne correspond à notre recherche, nous retournons plutôt la valeur ‘Terre’.’
Pour réarranger la logique comme un psuedo-code IF...THEN...ELSE
déclaration, nous demandons simplement à SQL d’évaluer :
IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END
Enfin, il est essentiel de se rappeler qu’une déclaration CASE
doit toujours être annexée à la fin avec une déclaration END
correspondante. Dans l’exemple ci-dessus, nous renommons également la valeur résultante qui est renvoyée en locale
, bien que cela soit certainement facultatif.
Utilisation de la fonction IIF
Si vous utilisez une version plus moderne de SQL, il est utile de savoir que SQL Server 2012 a introduit la très pratique fonction IIF
IIF
est une méthode raccourcie permettant d’exécuter une IF...ELSE
CASE
instruction et de renvoyer l’une des deux valeurs, en fonction de l’évaluation du résultat.
Restructurer notre exemple ci-dessus pour utiliser IIF
est assez simple.
SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books
Avec une fonction IIF
, nous remplaçons en grande partie le sucre syntaxique de l’instruction CASE
par quelques simples séparateurs de virgule pour différencier nos arguments.
Tout compte fait, CASE
et IIF
font le même travail, mais si on a le choix, IIF
sera généralement beaucoup plus simple à utiliser.