CASE
define una o varias condiciones y devuelve un resultado cuando se cumple una de ellas. Puedes definir un resultado predeterminado si no se cumple ninguna de las condiciones.
Ejemplo
Un uso habitual de la expresión CASE
es crear categorías o agrupaciones de datos. Por ejemplo, puedes crear una expresión CASE
como la que se indica a continuación para agrupar valores de países seleccionados en una dimensión denominada Región de ventas:
CASE
WHEN Country IN ("USA","Canada","Mexico") THEN "North America"
WHEN Country IN ("England","France") THEN "Europe"
ELSE "Other"
END
Cómo funciona la expresión CASE
de búsqueda
Las expresiones CASE
comienzan con la palabra clave CASE
y terminan con la palabra clave END
. Entre estos elementos se incluyen varias secciones o cláusulas:
WHEN
: condición que quieres evaluar. Puedes incluir varias cláusulasWHEN
en una sola expresiónCASE
.THEN
: el resultado que devuelve la expresión si se cumple la condición de la cláusulaWHEN
. La expresiónCASE
debe contener una cláusulaTHEN
por cada cláusulaWHEN
.ELSE
: opcional. Si no se cumple ninguna de las condiciones de las cláusulasWHEN
,CASE
devuelve el valor de la cláusulaELSE
, bien devuelveNULL
si no se ha especificado ninguna cláusulaELSE
.
CASE
evalúa cada cláusula WHEN
sucesiva y devuelve el primer resultado donde se cumple la condición. Las cláusulas WHEN
restantes y el resultado ELSE
no se evalúan. Si todas las condiciones WHEN
son false o NULL
, CASE
devuelve el resultado ELSE
o, si no hay ninguna cláusula ELSE
, devuelve NULL
.
Sintaxis de CASE de búsqueda
CASE
WHEN condition THEN result
[WHEN condition THEN result]
[...]
[ELSE else_result]
END
Parámetros
WHEN condition
Las condiciones WHEN
evalúan los datos y devuelven el valor true si se cumple la condición especificada o, si no se cumple, el valor false. Puedes usar cualquier expresión booleana válida como condición WHEN
.
THEN result
Las condiciones WHEN
deben corresponderse con una cláusula THEN
, que especifica los resultados si la condición se cumple. Si hay varias condiciones WHEN
, la expresión CASE
devuelve el resultado de la primera condición que se cumple.
Notas
Todos los posibles resultados de una instrucción THEN
deben ser del mismo tipo.
Por ejemplo, si la primera cláusula THEN
devuelve texto, las demás cláusulas THEN
y la cláusula ELSE
también deben devolver texto.
ELSE else_result
La cláusula opcional ELSE
especifica un resultado predeterminado, que se devuelve si no se cumple ninguna cláusula WHEN
. Si una expresión CASE
no tiene ninguna cláusula ELSE
y tampoco se cumple ninguna cláusula WHEN, la instrucción devuelve NULL
.
Las expresiones CASE
solo pueden contener una cláusula ELSE
.
Más ejemplos
Comprobar la desigualdad
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Clasificar los valores de dimensiones numéricas en segmentos independientes
Por ejemplo, puedes dividir los pedidos en pequeños, medianos o grandes en función de la cantidad de artículos que incluyan:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Evaluar una condición AND lógica
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Evaluar una condición AND/OR lógica
CASE WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*") AND is_livestream = TRUE OR Video Length > 600 THEN "GA Livestream or long video" END
Evaluar un parámetro
Por ejemplo, puedes definir un parámetro "Sales Target" y ajustarlo para ver qué pedidos han cumplido el objetivo:
CASE WHEN Qty Sold >= Sales target parameter THEN 1 ELSE 0 END
Devolver un campo o valor diferente en función de un valor de parámetro
En el primer ejemplo se devuelve una dimensión basada en el valor de parámetro seleccionado. Puedes utilizar esta técnica para permitir que los usuarios cambien la dimensión de desglose que usa un gráfico.
En el segundo ejemplo se muestra cómo devolver una métrica diferente en función de un valor de parámetro.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
## Nota: También puedes escribirlo con la sintaxis de CASE simple:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Instrucciones CASE
anidadas
Puedes anidar instrucciones CASE
para crear una lógica de bifurcación más compleja:
CASE WHEN Color = "blue"
ELSE
"NOT A HAT"
END