CASE (buscado)

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áusulas WHEN evalúan condition 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áusula WHEN debe tener una cláusula THEN coincidente, que especifique los resultados si ese WHEN condition es verdadero. Si hay varias cláusulas WHEN, la sentencia CASE muestra el result para el primer condition verdadero.

  • else_result (opcional): Es un campo o una expresión de cualquier tipo. La cláusula else_result ELSE especifica un resultado predeterminado para la sentencia CASE. Esta cláusula se muestra si ninguna de las cláusulas WHEN es verdadera. Si una sentencia CASE no tiene una cláusula ELSE y ninguna de las cláusulas WHEN es verdadera, la sentencia CASE muestra NULL.

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áusulas WHEN en una sola sentencia CASE.
  • THEN: Es el resultado que se mostrará si la condición de la cláusula WHEN es verdadera. Debes tener una cláusula THEN para cada cláusula WHEN en tu sentencia CASE.
  • ELSE: Opcional Si ninguna de las condiciones de la cláusula WHEN es verdadera, CASE muestra el valor de la cláusula ELSE o NULL si no se especifica una cláusula ELSE.

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