Le istruzioni CASE
valutano una o più condizioni e restituiscono un risultato quando la prima condizione è soddisfatta o un risultato predefinito se nessuna delle condizioni è soddisfatta.
Vedi anche: SE.
Esempi di utilizzo
Un uso comune di CASE
è la creazione di nuove categorie o raggruppamenti di dati. Ad esempio, per raggruppare valori dei paesi scelti in una dimensione Zona di vendita, puoi creare un'istruzione CASE
di questo tipo:
CASE WHEN Country IN ("USA","Canada","Mexico") THEN "North America" WHEN Country IN ("England","France") THEN "Europe" ELSE "Other" END
Sintassi
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Parametri
condition
: un'espressione o un campo logico. Le clausoleWHEN
valutanocondition
e restituiscono true se la condizione specificata è soddisfatta o false se la condizione non è soddisfatta.result
: un campo o un'espressione di qualsiasi tipo. A ogni clausolaWHEN
deve corrispondere una clausolaTHEN
, che specifica i risultati seWHEN condition
è true. Se sono presenti più clausoleWHEN
, l'istruzioneCASE
restituisce ilresult
per il primocondition
true.else_result
(facoltativo): un campo o un'espressione di qualsiasi tipo. La clausolaELSE
else_result
specifica un risultato predefinito per l'istruzioneCASE
. Questa clausola viene restituita nel caso in cui nessuna delle clausoleWHEN
sia true. Se un'istruzioneCASE
non ha clausoleELSE
e nessuna delle clausoleWHEN
è vera, l'istruzioneCASE
restituisceNULL
.
Un'istruzione CASE
può avere una sola clausola ELSE
.
Come funziona CASE
con ricerca
Un'istruzione CASE
inizia con la parola chiave CASE
e termina con la parola chiave END
. In mezzo ci saranno varie sezioni o clausole:
WHEN
: una condizione da valutare. Puoi avere più clausoleWHEN
in una singola istruzioneCASE
.THEN
: il risultato da restituire se la condizione della clausolaWHEN
è true. Devi avere una clausolaTHEN
per ogni clausolaWHEN
nell'istruzioneCASE
.ELSE
: facoltativo. Se nessuna delle condizioni della clausolaWHEN
è true,CASE
restituisce il valore nella clausolaELSE
oNULL
se non viene specificata alcuna clausolaELSE
.
CASE
valuta ogni clausola WHEN
successiva e restituisce il primo risultato in cui la condizione è true. Eventuali clausole WHEN
rimanenti e il risultato ELSE
non vengono valutati. Se tutte le condizioni WHEN
sono false o NULL
, CASE
restituisce il risultato ELSE
oppure, se non è presente alcuna clausola ELSE
, restituisce NULL
.
Esempi
Verificare la disuguaglianza
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classificare i valori delle dimensioni numeriche in bucket discreti
Ad esempio, puoi separare gli ordini in "Piccoli", "Medi" e "Grandi" in base all'importo:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Valutare una condizione AND logica
CASE WHEN Country ISO Code = "US" AND Medium = "cpc" THEN "US - Paid" ELSE "other" END
Valutare una condizione logica AND/OR
CASE WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*") AND is_livestream = TRUE OR Video Length > 600 THEN "GA Livestream or long video" END
Restituire un campo o un valore diverso a seconda del valore parametro
Esempio 1: restituisce una dimensione in base al valore parametro selezionato. Puoi utilizzare questa tecnica per consentire agli utenti di cambiare la dimensione di suddivisione utilizzata da un grafico.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
Puoi scrivere questo messaggio anche utilizzando la sintassi CASE semplice:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Esempio 2: restituisce una metrica diversa in base a un valore parametro.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Istruzioni CASE
nidificate
Puoi nidificare le istruzioni CASE
per creare una logica di diramazione più complessa:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END