Comment utiliser le cas expression SQL avec des valeurs

Vous pouvez utiliser une forme plus compacte du SQL AFFAIRE expression si vous comparez une valeur de test pour l'égalité avec une série d'autres valeurs. Cette forme est utile dans un SELECT ou METTRE À JOUR instruction si une table contient un nombre limité de valeurs dans une colonne et que vous souhaitez associer une valeur de résultat correspondant à chacune de ces valeurs de colonne.

Si vous utilisez AFFAIRE de cette manière, l'expression a la syntaxe suivante:

AFFAIRE test_valueQUAND PUIS value1 value2 result1WHEN PUIS result2 ... lorsque la valeurn Alors résulternELSE résultatXFIN

Si la valeur de test (valeur_test) est égal à valeur1, puis l'expression prend la valeur result1. Si tests_value est pas égal à valeur1 mais est égal à valeur2, puis l'expression prend la valeur result2. L'expression tente chaque valeur de comparaison, à son tour, tout le chemin vers le bas pour valeurn, jusqu'à ce qu'il atteigne un match.

Si aucune des valeurs de comparaison égale à la valeur d'essai, puis l'expression prend la valeur RésultX. Encore une fois, si l'option AUTRE clause est absente et aucun des valeurs de comparaison correspond à la valeur de test, l'expression reçoit une valeur nulle.




Pour comprendre comment la forme de la valeur fonctionne, examiner une affaire dans laquelle vous avez un tableau contenant les noms et grades des différents officiers de l'armée. Vous voulez inscrire les noms précédés par l'abréviation correcte pour chaque rang. La déclaration suivante a fait le travail:

SELECT CASE «générale» alors colonel RANKWHEN 'Gen.'WHEN' 'puis' 'lieutenant-colonel »Col.'WHEN THEN' Lt. Col.'WHEN 'major'THEN' Maj.'WHEN «capitaine» ALORS premier lieutenant 'Capt.'WHEN' 'puis' de 1er. Lt.'WHEN 'lieutenant' puis '2. Lt.'ELSE NULLEND, DIRIGEANTS LAST_NAMEFROM -

Le résultat est une liste similaire à l'exemple suivant:

Capt. MidnightCol. SandersGen. WashingtonMaj. DisasterNimitz

Chester Nimitz était un amiral dans la Marine des États-Unis pendant la Seconde Guerre mondiale. Parce que son rang est pas répertorié dans la AFFAIRE expression, le AUTRE clause ne lui donne pas un titre.

Pour un autre exemple, supposons capitaine Midnight obtient une promotion au grade de major et que vous souhaitez mettre à jour la base de données DIRIGEANTS conséquence. Supposons que la variable officer_last_name contient la valeur 'Midnight' et que la variable new_rank contient un nombre entier (4) Qui correspond au nouveau grade de minuit, selon le tableau suivant.

New_RankRang
1général
2colonel
3lieutenant colonel
4majeur
5capitaine
6premier lieutenant
7lieutenant
8NUL

Vous pouvez enregistrer la promotion en utilisant le code SQL suivant:

UPDATE OFFICERSSET RANK = CASE: new_rankWHEN 1 THEN 'general'WHEN 2 THEN' colonel'WHEN 3 THEN 'lieutenant colonel'WHEN 4 THEN' major'WHEN 5 THEN 'captain'WHEN 6 THEN' abord lieutenant'WHEN 7 THEN 'sous-lieutenant «QUAND 8 PUIS NULLENDWHERE LAST_NAME =: officer_last_name -

Une syntaxe alternative pour le AFFAIRE avec des valeurs d'expression est la suivante:

CASEWHEN valeur_test = Valeur1 ALORS result1WHEN valeur_test = Valeur2 ALORS QUAND RESULT2 ... valeur_test = Valeurn Alors résulternELSE résultatXFIN

» » » » Comment utiliser le cas expression SQL avec des valeurs