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áusulasWHEN
avaliamcondition
e 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áusulaWHEN
tem de ter uma cláusulaTHEN
correspondente, que especifica os resultados se esseWHEN condition
for verdadeiro. Se existirem várias cláusulasWHEN
, a declaraçãoCASE
devolve o valorresult
para o primeiro valorcondition
verdadeiro.else_result
(opcional) – Um campo ou uma expressão de qualquer tipo. A cláusulaELSE
else_result
especifica um resultado predefinido para a declaraçãoCASE
. Esta cláusula é devolvida se nenhuma das cláusulasWHEN
for verdadeira. Se uma declaraçãoCASE
não tiver uma cláusulaELSE
e nenhuma das cláusulasWHEN
for verdadeira, a declaraçãoCASE
devolveNULL
.
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áusulasWHEN
numa única declaraçãoCASE
.THEN
: o resultado a devolver se a condição da cláusulaWHEN
for verdadeira. Tem de ter uma cláusulaTHEN
para cada cláusulaWHEN
na sua declaraçãoCASE
.ELSE
: opcional. Se nenhuma das condições da cláusulaWHEN
for verdadeira,CASE
devolve o valor na cláusulaELSE
ouNULL
se 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 isto 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