CASE (Searched)
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.
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 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
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áusulasWHENevalúanconditiony 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áusulaWHENdebe corresponderse con una cláusulaTHEN, que especifica los resultados siWHEN conditionse cumple. Si hay varias cláusulasWHEN, la instrucciónCASEdevuelve elresultde la primeraconditionque se cumple.else_result(opcional): puede ser un campo o una expresión de cualquier tipo. La cláusulaELSEelse_resultespecifica un resultado predeterminado para la instrucciónCASE. Esta cláusula se devuelve si no se cumple ninguna cláusulaWHEN. Si una instrucciónCASEno tiene ninguna cláusulaELSEy tampoco se cumple ninguna cláusulaWHEN, la instrucciónCASEdevuelveNULL.
Una instrucción CASE solo puede tener una cláusula ELSE.
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áusulasWHENen una sola instrucciónCASE.THEN: el resultado que devuelve la expresión si se cumple la condición de la cláusulaWHEN. La instrucciónCASEdebe contener una cláusulaTHENpor cada cláusulaWHEN.ELSE: opcional. Si no se cumple ninguna de las condiciones de las cláusulasWHEN,CASEdevuelve el valor de la cláusulaELSE, oNULLsi 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
Clasificar los valores de dimensiones de fecha en segmentos independientes
Por ejemplo, puedes dividir un año en semestres según fechas concretas:
CASE
WHEN Date >= DATE(2018, 9, 23) and Date < DATE(2018, 12, 13) THEN "Fall Semester 2018"
WHEN Date >= DATE(2018, 1, 3) and Date < DATE(2019, 3, 21) THEN "Winter Semester 2019"
WHEN Date >= DATE(2019, 3, 27) and Date < DATE(2019, 6, 12) THEN "Spring Semester 2019"
ELSE "Uncategorized"
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
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