As instruções CASE
avaliam uma ou mais condições e retornam um resultado quando a primeira condição é atendida, ou um resultado padrão se nenhuma das condições for atendida.
Consulte também: IF.
Exemplo de uso
CASE
é normalmente usada para criar novas categorias ou agrupamentos de dados. Por exemplo, para agrupar valores de países selecionados na dimensão Região de vendas, você pode criar uma instrução CASE
como esta:
CASE WHEN Country IN ("USA","Canada","Mexico") THEN "North America" WHEN Country IN ("England","France") THEN "Europe" ELSE "Other" END
Sintaxe
CASE WHEN condition THEN result [WHEN condition THEN result] [...] [ELSE else_result] END
Parâmetros
condition
: um campo ou uma expressão lógica. As cláusulasWHEN
avaliamcondition
e retornam "true" se a condição especificada for atendida ou "false" se não for atendida.result
: um campo ou uma expressão de qualquer tipo. Cada cláusulaWHEN
precisa ter uma cláusulaTHEN
correspondente, que especifica os resultados seWHEN condition
for verdadeiro. Se houver várias cláusulasWHEN
, a instruçãoCASE
vai retornar oresult
para a primeiracondition
verdadeira.else_result
(opcional): um campo ou uma expressão de qualquer tipo. A cláusulaelse_result
ELSE
especifica um resultado padrão para a instruçãoCASE
. Essa cláusula será retornada se nenhuma das cláusulasWHEN
for verdadeira. Se uma instruçãoCASE
não tiver uma cláusulaELSE
e nenhuma das cláusulasWHEN
for verdadeira, a instruçãoCASE
vai retornarNULL
.
Uma instrução CASE
pode ter apenas uma cláusula ELSE
.
Como a expressão CASE
pesquisada funciona
Uma instrução CASE
pesquisada começa com a palavra-chave CASE
e termina com a palavra-chave END
. Entre elas, há uma série de seções ou cláusulas:
WHEN
: uma condição que você quer avaliar. É possível ter várias cláusulasWHEN
em uma única instruçãoCASE
.THEN
: o resultado que será retornado se a condição da cláusulaWHEN
for verdadeira. É preciso ter uma cláusulaTHEN
para cada cláusulaWHEN
na instruçãoCASE
.ELSE
: opcional. Se nenhuma das condições da cláusulaWHEN
for verdadeira,CASE
vai retornar o valor na cláusulaELSE
ouNULL
se nenhuma cláusulaELSE
for especificada.
CASE
avalia cada cláusula WHEN
sucessiva e retorna o primeiro resultado em que a condição é verdadeira. As cláusulas WHEN
restantes e o resultado ELSE
não são avaliados. Se todas as condições WHEN
forem falsas ou NULL
, CASE
vai retornar o resultado ELSE
. Caso não haja uma cláusula ELSE
, NULL
será retornado.
Exemplos
Verificar a desigualdade
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classificar os valores de dimensão numérica em intervalos discretos
Por exemplo, você pode separar os pedidos em "Pequeno", "Médio" ou "Grande" com base no valor:
CASE WHEN Amount < 20 THEN "Small" WHEN Amount >= 20 and Amount < 100 THEN "Medium" WHEN Amount >= 100 THEN "Large" END
Avaliar uma condição AND lógica
CASE WHEN Country ISO Code = "US" AND Medium = "cpc" THEN "US - Paid" ELSE "other" END
Avaliar uma condição 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
Retornar um campo ou valor diferente dependendo de um valor de parâmetro
Exemplo 1: retorne uma dimensão com base no valor do parâmetro selecionado. Você pode usar essa técnica para permitir que os usuários mudem a dimensão de detalhamento usada por um gráfico.
CASE WHEN Breakdown = "Product Category" THEN Product Category WHEN Breakdown = "Store" THEN Store END
Você também pode escrever isso usando a sintaxe CASE simples:
CASE Breakdown WHEN "Product Category" THEN Product Category WHEN "Store" THEN Store END
Exemplo 2: retorne uma métrica diferente com base em um valor de parâmetro.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Instruções CASE
aninhadas
É possível aninhar instruções CASE
para criar uma lógica de ramificação mais complexa:
CASE WHEN REGEXP_CONTAINS(SKU, "Hats") THEN CASE WHEN Color = "blue" THEN "BLUE HAT" ELSE "JUST A HAT" END ELSE "NOT A HAT" END