Las sentencias CASE
evalúan una o más condiciones y muestran un resultado cuando se cumple la primera condición o un resultado predeterminado si no se cumple ninguna de las condiciones.
Consulta también: IF.
Ejemplo de uso
Un uso común de CASE
es crear categorías o agrupaciones de datos nuevas. Por ejemplo, para agrupar los valores de país seleccionados en una dimensión Región de ventas, puedes crear una sentencia CASE
como esta:
CASE WHEN Country IN ("USA","Canada","Mexico") THEN "North America" WHEN Country IN ("England","France") THEN "Europe" ELSE "Other" END
Sintaxis
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Parámetros
condition
: Es un campo o una expresión lógica. Las cláusulasWHEN
evalúancondition
y muestran verdadero si se cumple la condición especificada o falso si no se cumple.result
: Es un campo o una expresión de cualquier tipo. Cada cláusulaWHEN
debe tener una cláusulaTHEN
coincidente, que especifique los resultados si eseWHEN condition
es verdadero. Si hay varias cláusulasWHEN
, la sentenciaCASE
muestra elresult
para el primercondition
verdadero.else_result
(opcional): Es un campo o una expresión de cualquier tipo. La cláusulaelse_result
ELSE
especifica un resultado predeterminado para la sentenciaCASE
. Esta cláusula se muestra si ninguna de las cláusulasWHEN
es verdadera. Si una sentenciaCASE
no tiene una cláusulaELSE
y ninguna de las cláusulasWHEN
es verdadera, la sentenciaCASE
muestraNULL
.
Una sentencia CASE
solo puede tener una cláusula ELSE
.
Cómo funciona CASE
de búsqueda
Una sentencia CASE
buscada comienza con la palabra clave CASE
y termina con la palabra clave END
. En el medio, tendrás varias secciones o cláusulas:
WHEN
: Es una condición que deseas evaluar. Puedes tener varias cláusulasWHEN
en una sola sentenciaCASE
.THEN
: Es el resultado que se mostrará si la condición de la cláusulaWHEN
es verdadera. Debes tener una cláusulaTHEN
para cada cláusulaWHEN
en tu sentenciaCASE
.ELSE
: Opcional Si ninguna de las condiciones de la cláusulaWHEN
es verdadera,CASE
muestra el valor de la cláusulaELSE
oNULL
si no se especifica una cláusulaELSE
.
CASE
evalúa cada cláusula WHEN
sucesiva y muestra el primer resultado en el que la condición sea verdadera. Las cláusulas WHEN
restantes y el resultado ELSE
no se evalúan. Si todas las condiciones WHEN
son falsas o NULL
, CASE
muestra el resultado ELSE
o, si no hay una cláusula ELSE
, muestra NULL
.
Ejemplos
Verifica la desigualdad
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Clasifica los valores de las dimensiones numéricas en buckets discretos
Por ejemplo, puedes separar los pedidos en “Pequeño”, “Mediano” o “Grande” según el importe:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Cómo evaluar una condición lógica Y
CASE WHEN Country ISO Code = "US" AND Medium = "cpc" THEN "US - Paid" ELSE "other" END
Cómo evaluar una condición lógica Y/O
CASE WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*") AND is_livestream = TRUE OR Video Length > 600 THEN "GA Livestream or long video" END
Muestra un campo o valor diferente según el valor de un parámetro
Ejemplo 1: Muestra una dimensión según el valor del parámetro seleccionado. Puedes usar esta técnica para permitir que los usuarios cambien la dimensión de desglose que usa un gráfico.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
También puedes escribir esto con la sintaxis CASE simple:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Ejemplo 2: Muestra una métrica diferente según el valor de un parámetro.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Declaraciones CASE
anidadas
Puedes anidar sentencias CASE
para crear una lógica de ramificación más compleja:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END