Las instrucciones CASE
evalúan una o varias condiciones y devuelven un resultado cuando se cumple la primera condición, o bien un resultado predeterminado si no se cumple ninguna.
Nota: La instrucción CASE
puede ser CASE
de búsqueda y CASE
simple. Las instrucciones CASE
de búsqueda te permiten usar una lógica más sofisticada, mientras que las instrucciones CASE
simples son más fáciles de crear.
Consulta también IF.
Ejemplo de uso
Un uso habitual de la expresión CASE
es crear categorías o agrupaciones de datos. Por ejemplo, puedes crear una instrucción CASE
como la que se incluye 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
Sintaxis
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Parámetros
-
condition
: campo o expresión lógicos. Las cláusulasWHEN
evalúancondition
y devuelven el valor true si se cumple la condición especificada o, si no se cumple, el valor false. -
result
: puede ser un campo o una expresión de cualquier tipo. Cada cláusulaWHEN
debe corresponderse con una cláusulaTHEN
, que especifica los resultados siWHEN condition
se cumple. Si hay varias cláusulasWHEN
, la instrucciónCASE
devuelveresult
de la primeracondition
que se cumple. else_result
(opcional): puede ser un campo o una expresión de cualquier tipo. La cláusulaELSE
else_result
especifica un resultado predeterminado para la instrucciónCASE
. Esta cláusula se devuelve si no se cumple ninguna cláusulaWHEN
. Si una instrucciónCASE
no tiene ninguna cláusulaELSE
y tampoco se cumple ninguna cláusulaWHEN
, la instrucciónCASE
devuelveNULL
.
Una instrucción CASE
solo puede tener una cláusula ELSE
.
Nota: Todas las cláusulas THEN
de una instrucción CASE
deben devolver el mismo tipo de datos. Por ejemplo, si la primera cláusula THEN
devuelve datos de texto, las cláusulas THEN
adicionales también deben devolver texto.
Cómo funciona la expresión CASE
de búsqueda
Las instrucciones CASE
de búsqueda 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 instrucciónCASE
.THEN
: el resultado que devuelve la expresión si se cumple la condición de la cláusulaWHEN
. La instrucciónCASE
debe contener una cláusulaTHEN
por cada cláusulaWHEN
.ELSE
: Es opcional. Si no se cumple ninguna de las condiciones de las cláusulasWHEN
,CASE
devuelve el valor de la cláusulaELSE
, oNULL
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
.
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 lógica AND
CASE WHEN Country ISO Code = "US" AND Medium = "cpc" THEN "US - Paid" ELSE "other" END
Evaluar una condición lógica 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
Devolver un campo o valor diferente en función de un valor de parámetro
Ejemplo 1: 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.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
Ten en cuenta que también puedes escribirlo con la sintaxis de CASE simple:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Ejemplo 2: Devuelve una métrica diferente en función de un valor de parámetro
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 REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END