Articles

Instruction SQL CASE – Formulaires simples et recherchés

L’objectif principal d’une expression SQL CASE renvoie une valeur basée sur un ou plusieurs tests conditionnels. Les expressions de CAS d’utilisation n’importe où dans une expression d’instruction SQL sont autorisées. Bien qu’il s’agisse vraiment d’une expression, certaines personnes les appellent des « déclarations de CAS. »Cela provient probablement de leur utilisation dans les langages de programmation.

L’expression de CAS SQL est extrêmement polyvalente et utilisée dans les requêtes SQLServer. En particulier, il est utilisé dans la liste des colonnes SELECT, les clauses GROUP BY, HAVING et ORDER BY. L’expression de CASSE standardise également (embellit) les données ou effectue des vérifications pour se protéger contre les erreurs, telles que diviser par zéro.

Tous les exemples de cette leçon sont basés sur Microsoft SQL Server Management Studio et la base de données AdventureWorks2012. Commencer à utiliser SQL Server à l’aide de mon guide gratuit et des outils Microsoft gratuits.

Instruction CASE SQL Server

Il existe deux formes pour la clause CASE : simple et recherchée. Les deux formulaires renvoient un résultat basé sur le test d’une expression. Bien que techniquement des expressions, vous verrez que beaucoup de gens s’y réfèrent comme une déclaration.

L’instruction SQL CASE simple est utilisée pour les tests d’égalité. Il teste une expression par rapport à plusieurs valeurs, ce qui le rend idéal pour transformer un ensemble de valeurs, telles que les abréviations en leur forme longue correspondante.

L’instruction SQL CASE recherchée utilise un format d’évaluation d’expression plus complet. C’est bien lorsque vous souhaitez travailler avec des fourchettes de données, telles que des fourchettes de salaires ou des âges.

Nous commençons d’abord par le formulaire simple, puis couvrons la recherche.

Expression de CAS Forme simple

La forme simple de l’expression de CAS compare les résultats d’une expression avec une série de tests et renvoie un « résultat” lorsque le « test” renvoie true.

La forme générale pour une expression de CAS de formulaire simple est :

CASE expression
WHEN test THEN result

ELSE otherResult
END

L’instruction ELSE est facultative dans une expression de CAS. Il renvoie « otherResult » lorsqu’aucune correspondance n’est effectuée et qu’ELSE est présent. S’il n’y a pas d’AUTRE dans l’instruction CASE, elle renvoie NULL.

La clause ELSE est un excellent moyen d’attraper des valeurs de données mauvaises ou inattendues et de renvoyer un résultat autre que NULL.

Exemple de transformation de données

Il existe plusieurs raisons d’utiliser une instruction CASE. La première consiste à transformer des données d’un ensemble de valeurs à un autre. Par exemple, pour afficher le sexe d’un employé comme « Homme” ou « Femme”, lorsque vos données sont encodées en « M” ou « F”, utilisez une expression de CASSE pour tester la représentation à un seul caractère et renvoyer la forme longue correspondante.

L’exemple pour ceci est:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

Exemple de normalisation des données

De même, vous pouvez utiliser une clause CASE simple pour standardiser plusieurs valeurs en une seule. L’extension de notre exemple mappe plusieurs variantes à Male ou Female:

Vous vous demandez peut-être si vous pouviez simplement créer une autre table dans votre base de données et l’utiliser pour rechercher les valeurs. J’aurais tendance à convenir que ce serait le meilleur, mais dans de nombreuses situations, vous n’aurez pas l’autorisation de créer des tables dans la base de données. Dans ce cas, vous êtes laissé à l’esprit une instruction SELECT fournit.

Résumé

Voici quelques éléments à prendre en compte lors de l’utilisation de l’expression de CAS simple :

  • N’autorise que les comparaisons d’égalité.
  • Évalue les tests sont évalués dans l’ordre défini.
  • Renvoie le résultat correspondant au premier VRAI test.
  • Si aucune correspondance n’est effectuée, case renvoie NULL sauf si ELSE est présent.

Formulaire de recherche d’expression de CAS

Le formulaire de recherche de l’expression de CAS permet des tests plus polyvalents. Utilisez-le pour évaluer une plus grande gamme de tests. En fait, toute expression booléenne est qualifiée de test.

Une expression de casse recherchée a ce format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

Avec le formulaire recherché, utilisez les clauses WHEN pour évaluer les expressions booléennes. Le résultat de la première expression booléenne VRAIE est renvoyé.

Vous trouverez ci-dessous la forme de cas recherchée de l’exemple de genre de l’employé de la section précédente.

Nous avons également utilisé ce même exemple pour l’instruction SQL case simple. Je l’ai fait pour que vous puissiez voir la différence subtile. Notez que chaque clause WHEN contient désormais le test sous forme d’expression booléenne.

Comparaison des formulaires Simples et recherchés CAS SQL

Voici les instructions côte à côte :

Expression de CAS simple par rapport à l’expression de CAS recherchée
Expression de CAS simple par rapport à l’expression de CAS recherchée

J’ai tendance à utiliser le format d’expression de CASSE recherché dans tous mes SQL. Cette raison est simple, je n’ai qu’un seul format à retenir !

Puisque nous testons des expressions booléennes, l’instruction de CAS recherchée ne se limite pas aux seuls tests d’égalité. Cela rend ce formulaire très bon pour comparer des plages de valeurs. Peut-être que le directeur des ventes d’Adventure Works souhaite organiser les produits par gamme de prix. Comment cela pourrait-il être fait avec SQL?

Compte tenu des noms et plages suivants fournis par le directeur des ventes, nous pouvons construire une expression de CAS pour comparer le prix de liste à une plage de valeurs, puis renvoyer le nom de la plage de prix appropriée.

L’instruction case est placée dans la liste SELECT column et renvoie une valeur de caractère. Voici le SQL qui fait l’affaire:

Lorsque vous exécutez cette requête, vous verrez PriceRange répertorié et affichant des valeurs selon les plages spécifiées dans l’expression de CAS :

Résultats de l’instruction de CAS

Les instructions de CAS peuvent également être utilisé pour aider à prévenir les erreurs. Un bon exemple consiste à tester des valeurs valides dans des expressions telles que lorsque vous divisez des nombres.

Considérez

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

Cette instruction renvoie le message

Divide by zero error encountered.

En utilisant une clause CASE, nous pouvons nous assurer de ne pas diviser par zéro par inadvertance.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

Une expression de CASSE peut être utilisée partout où une expression peut être utilisée. Cela signifie que vous pouvez l’utiliser pour renvoyer un résultat de valeur de colonne ou même l’utiliser dans une clause ORDER BY.

Dans la section suivante, nous explorerons l’utilisation des CAS dans les clauses ORDER BY et GROUP BY.

Expression de CAS dans L’ORDRE PAR

En continuant avec la demande du directeur des ventes, supposons qu’elle veuille également voir les produits triés par gamme de prix, puis par nom de produit. Nous avons vu comment nous pouvons afficher les fourchettes de prix sous forme de colonne, mais comment trions-nous?

En fait, c’est assez facile. Puisque CASE est une expression, nous pouvons l’utiliser comme une fois parmi les valeurs à partir desquelles les résultats sont ordonnés. N’oubliez pas que nous ne nous limitons pas au tri des colonnes de la table, nous pouvons également trier une expression.

Voici la requête à trier par fourchette de prix.

Nous pouvons ensuite ajouter un relevé de CAS à la liste de SÉLECTION pour afficher également la fourchette de prix.

Comme vous pouvez le voir, les choses commencent à se compliquer. Voyez-vous comment l’instruction CASE est répétée à la fois dans la liste de SÉLECTION et dans ORDER BY? Heureusement, nous pouvons simplifier un peu cela, mais en supprimant l’instruction CASE de la COMMANDE PAR et en la remplaçant par le nom d’alias de l’expression de CAS de liste de sélection PriceRange:

Expression CASE en GROUPE PAR

Maintenant que nous avons donné au directeur des ventes une liste détaillée qu’elle veut voir les données récapitulatives – cela ne se termine-t-il jamais? D’après mon expérience, ce n’est pas le cas, donc connaître beaucoup de SQL pour satisfaire les demandes des clients est votre clé du succès.

Quoi qu’il en soit, la bonne nouvelle est que nous pouvons utiliser l’expression de CAS que nous avons créée pour créer des groupes récapitulatifs. Dans le SQL suivant, nous regroupons les données par PriceRange. Des statistiques sommaires sur le prix de liste minimum, maximum et moyen sont créées.

Contrairement à la clause ORDER BY, nous ne pouvons pas référencer l’alias de colonne PriceRange dans le GROUPE BY. L’expression entière du CAS doit être répétée. Voici les résultats de notre requête:

Résultats – Expression de CAS en GROUPE PAR

Envelopper

Comme vous pouvez le voir, l’utilisation d’expressions de CAS ajoute de la polyvalence à vos instructions SQL. Ils vous permettent non seulement de transformer des données d’un ensemble de valeurs à un autre, mais peuvent également être utilisés pour garantir que les instructions ne renvoient pas d’erreurs.

Sur les deux formulaires, simples et recherchés, j’ai tendance à utiliser le formulaire de recherche. La raison en est que la forme simple est limitée aux tests d’égalité; alors que la forme recherchée peut le faire et plus encore.

Comme les expressions de CASSE sont des expressions et non des instructions ou des clauses, elles peuvent être utilisées là où toute autre expression est utilisée. Cela signifie que vous pouvez utiliser tout au long de l’instruction SELECT et ailleurs dans SQL.