CASE no SELECT
O comando CASE é uma expressão condicional que fornece a capacidade de executar um conjunto de instruções entre várias condições.
É semelhante a uma série de instruções IF em outras linguagens de programação.
O CASE tem duas formas: * A expressão CASE simples (CASE) compara uma expressão de entrada com um conjunto de expressões simples para determinar o resultado. * A expressão CASE pesquisada (CASE WHEN) avalia um conjunto de expressões booleanas para determinar o resultado.
Ambos os formatos suportam um argumento ELSE opcional, que é devolvido se nenhuma condição for verdadeira.
Se o argumento ELSE for omitido e nenhuma condição for verdadeira, o CASE devolve NULL. Esta expressão pode ser utilizada em várias instruções ou cláusulas que permitam uma expressão válida, como SELECT, UPDATE, DELETE e SET, e em cláusulas como
Sintaxe básica da expressão CASE simples
CASE expressao_entrada
WHEN expressao_comparacao
THEN expressao_resultado [ ...n ]
[ ELSE expressao_resultado_alternativo ]
END
Sintaxe básica da expressão CASE pesquisada
O CASE WHEN está composto por três partes:
- a cláusula “CASE“.
- a cláusula “WHEN”.
- a cláusula “THEN“.
CASE WHEN expressao_booleana
THEN expressao_resultado [ ...n ]
[ ELSE expressao_resultado_alternativo ]
END
É importante garantir que os tipos de dados da expressão de entrada e cada expressão de comparação sejam os mesmos ou que haja uma conversão implícita entre eles. Da mesma forma, os tipos de dados da expressão de resultado alternativo e qualquer expressão de resultado devem ser os mesmos ou permitir uma conversão implícita.
Exemplo
USE AdventureWorksLT;
GO
SELECT ProductNumber, Name, ListPrice,
CASE Size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
WHEN 'XL' THEN 'Extra Large'
ELSE Size
END AS Size
FROM SalesLT.Product
SELECT ProductNumber, Name, ProductCategoryID,
CASE ProductCategoryID
WHEN 5 THEN 'Mountain Bikes'
WHEN 7 THEN 'Touring Bikes'
WHEN 9 THEN 'SUPER Bikes'
ELSE CAST (ProductCategoryID as varchar(5))
END AS Category
FROM SalesLT.Product