CASE (Searched)
As declarações CASE avaliam uma ou mais condições e devolvem um resultado quando a primeira condição é cumprida ou um resultado predefinido se nenhuma das condições for cumprida.
Veja também: SE.
Exemplos de utilização
Uma utilização comum das CASE é criar novas categorias ou agrupamentos de dados. Por exemplo, para agrupar valores de países selecionados numa dimensão de região de vendas, pode criar uma declaração CASE semelhante a 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áusulasWHENavaliamconditione devolvem true se a condição especificada for cumprida ou false se a condição não for cumprida.result– Um campo ou uma expressão de qualquer tipo. Cada cláusulaWHENtem de ter uma cláusulaTHENcorrespondente, que especifica os resultados se esseWHEN conditionfor verdadeiro. Se existirem várias cláusulasWHEN, a declaraçãoCASEdevolve oresultpara o primeiroconditionverdadeiro.else_result(opcional) – Um campo ou uma expressão de qualquer tipo. A cláusulaELSEelse_resultespecifica um resultado predefinido para a declaraçãoCASE. Esta cláusula é devolvida se nenhuma das cláusulasWHENfor verdadeira. Se uma declaraçãoCASEnão tiver uma cláusulaELSEe nenhuma das cláusulasWHENfor verdadeira, a declaraçãoCASEdevolveNULL.
Uma declaração CASE só pode ter uma cláusula ELSE.
Como funciona a funcionalidade CASE pesquisado
Uma declaração CASE pesquisada começa com a palavra-chave CASE e termina com a palavra-chave END. Entre estas, tem várias secções ou cláusulas:
WHEN: uma condição que quer avaliar. Pode ter várias cláusulasWHENnuma única declaraçãoCASE.THEN: o resultado a devolver se a condição da cláusulaWHENfor verdadeira. Tem de ter uma cláusulaTHENpara cada cláusulaWHENna sua declaraçãoCASE.ELSE: opcional. Se nenhuma das condições da cláusulaWHENfor verdadeira,CASEdevolve o valor na cláusulaELSEouNULLse não for especificada nenhuma cláusulaELSE.
CASE avalia cada cláusula WHEN sucessiva e devolve o primeiro resultado em que a condição é verdadeira. Quaisquer cláusulas WHEN restantes e o resultado ELSE não são avaliados. Se todas as condições WHEN forem falsas ou NULL, CASE devolve o resultado ELSE ou, se não estiver presente nenhuma cláusula ELSE, devolve NULL.
Exemplos
Verifique se existem desigualdades
CASE WHEN Medium != "cpc" THEN "free" ELSE "paid" END
Classifique os valores de dimensões numéricas em grupos discretos
Por exemplo, pode separar as encomendas em "Pequena", "Média" ou "Grande" com base no valor da encomenda:
CASE
WHEN Amount < 20 THEN "Small"
WHEN Amount >= 20 and Amount < 100 THEN "Medium"
WHEN Amount >= 100 THEN "Large"
END
Classifique os valores da dimensão de data em intervalos discretos
Por exemplo, pode separar um ano em semestres com base em datas específicas:
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
Avalie uma condição lógica E
CASE
WHEN Country ISO Code = "US" AND Medium = "cpc"
THEN "US - Paid"
ELSE "other"
END
Avalie uma condição lógica E/OU
CASE
WHEN REGEXP_MATCH(Video Title, ".*Google Analytics*")
AND is_livestream = TRUE
OR Video Length > 600
THEN "GA Livestream or long video"
END
Devolva um campo ou um valor diferente consoante o valor de um parâmetro
Exemplo 1: devolve uma dimensão com base no valor do parâmetro selecionado. Pode usar esta técnica para permitir que os utilizadores alterem a dimensão de discriminação usada por um gráfico.
CASE
WHEN Breakdown = "Product Category" THEN Product Category
WHEN Breakdown = "Store" THEN Store
END
Também pode escrever esta condição usando a sintaxe CASE simples:
CASE Breakdown
WHEN "Product Category" THEN Product Category
WHEN "Store" THEN Store
END
Exemplo 2: devolva uma métrica diferente com base num valor de parâmetro.
CASE WHEN Show Adjusted Cost = TRUE THEN Cost + Adjustments ELSE Cost END
Declarações CASE aninhadas
Pode aninhar declaraçõ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