Les instructions CASE
évaluent une ou plusieurs conditions et renvoient un résultat lorsque la première condition est remplie, ou un résultat par défaut si aucune des conditions n'est remplie.
Voir aussi: SI.
Exemple d'utilisation
CASE
est généralement utilisé pour créer des catégories ou des regroupements de données. Par exemple, pour regrouper certaines valeurs de pays dans une dimension Région de vente, vous pourriez créer une instruction CASE
de ce type:
CASE WHEN Country IN ("USA","Canada","Mexico") THEN "North America" WHEN Country IN ("England","France") THEN "Europe" ELSE "Other" END
Syntaxe
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Paramètres
condition
: champ ou expression logique. Les clausesWHEN
évaluentcondition
et renvoient la valeur "true" si la condition spécifiée est remplie, ou "false" si elle ne l'est pas.result
: champ ou expression de n'importe quel type. Chaque clauseWHEN
doit contenir une clauseTHEN
correspondante, qui indique les résultats si laWHEN condition
est "true". S'il existe plusieurs clausesWHEN
, l'instructionCASE
renvoie laresult
pour la premièrecondition
"true".else_result
(facultatif) : champ ou expression de n'importe quel type. La clauseelse_result
ELSE
spécifie un résultat par défaut pour l'instructionCASE
. Cette clause est renvoyée si aucune des clausesWHEN
n'est "true". Si une instructionCASE
ne comporte aucune clauseELSE
et qu'aucune des clausesWHEN
n'est vraie, l'instructionCASE
renvoieNULL
.
Une instruction CASE
ne peut contenir qu'une seule clause ELSE
.
Fonctionnement de CASE
élaboré
Une instruction CASE
élaborée commence par le mot clé CASE
et se termine par le mot clé END
. Entre les deux se trouvent un certain nombre de sections ou clauses:
WHEN
: condition que vous souhaitez évaluer. Une même instructionCASE
peut avoir plusieurs clausesWHEN
.THEN
: résultat à renvoyer si la condition de la clauseWHEN
est "true". Une instructionCASE
doit contenir une clauseTHEN
pour chaque clauseWHEN
.ELSE
: facultatif. Si aucune des conditions de la clauseWHEN
n'est "true",CASE
renvoie la valeur de la clauseELSE
ouNULL
si aucune clauseELSE
n'est spécifiée.
CASE
évalue successivement chaque clause WHEN
et renvoie le premier résultat pour lequel la condition est vraie. Les clauses WHEN
restantes et le résultat ELSE
ne sont alors pas évalués. Si toutes les conditions WHEN
sont "false" ou NULL
, CASE
renvoie le résultat ELSE
. Si aucune clause ELSE
n'est présente, NULL
est renvoyé.
Examples
Vérifier une inégalité
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classifier des valeurs de dimension numérique au sein de buckets distincts
Par exemple, vous pouvez séparer des commandes selon trois tailles ("Petite", "Moyenne" et "Grande") basées sur le montant des commandes:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Évaluer une condition AND logique
CASE WHEN Country ISO Code = "US" AND Medium = "cpc" THEN "US - Paid" ELSE "other" END
Évaluer une condition AND/OU logique
CASE WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*") AND is_livestream = TRUE OR Video Length > 600 THEN "GA Livestream or long video" END
Renvoyer un autre champ ou une autre valeur en fonction d'une valeur de paramètre
Exemple 1: renvoyer une dimension basée sur la valeur de paramètre sélectionnée. Avec cette approche, les utilisateurs peuvent passer d'une dimension de répartition à un graphique.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
Vous pouvez également utiliser la syntaxe CASE simple suivante:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Exemple 2: renvoyer une autre métrique basée sur une valeur de paramètre.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Instructions CASE
imbriquées
Vous pouvez imbriquer des instructions CASE
pour créer une logique d'embranchement plus complexe:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END