Neste post, demonstro como utilizar uma expressão case em um select feito com PL/SQL (Oracle). O exemplo é bem simples, mas pode ser facilmente adaptado para necessidades mais complexas.
Para fins didáticos, vamos considerar que a tabela CLIENTE possui uma coluna chamada CLI_STATUS que possui as seguintes siglas:
Sigla | Significado |
---|---|
A1 | Ativo |
A2 | Ativo |
B | Bloqueado |
D | Desativado |
DP | Desaparecido |
Considere também que esta tabela possui uma coluna chamada CLI_NOME e CLI_ID com (respectivamente) o nome e o id do cliente.
A ideia é fazer um select que retorne o ID, o Nome, o status (sigla) e o significado de cada sigla.
O select básico é este:
SELECT cli_id, cli_nome, cli_status FROM cliente;
Agora vamos elaborar o case:
CASE WHEN status IN('A1','A2') THEN 'Ativo' WHEN status = 'B' THEN 'Bloqueado' WHEN status = 'D' THEN 'Desativado' WHEN status = 'DP' THEN 'Desaparecido' END AS sigla_descricao
Este case irá escrever Ativo quando o valor de status for A1 ou A2, Bloqueado quando o valor de status for B, Desativado quando o valor de status for D e Desaparecido quando o valor de status for DP.
Ok, isso resolve o problema, mas vamos imaginar que esta tabela vem de um sistema legado e pode possuir outros valores nesta coluna. Como eles não interessam para o nosso sistema, qualquer outro valor que vier deve ser considerado como legado.
Sendo assim, vamos evoluir nosso case:
CASE WHEN status IN('A1','A2') THEN 'Ativo' WHEN status = 'B' THEN 'Bloqueado' WHEN status = 'D' THEN 'Desativado' WHEN status = 'DP' THEN 'Desaparecido' ELSE 'Legado' END AS sigla_descricao
Pronto. Agora todos os valores estão cobertos pela expressão case. Só colocar ela no select:
SELECT cli_id , cli_nome , cli_status , CASE WHEN status IN('A1','A2') THEN 'Ativo' WHEN status = 'B' THEN 'Bloqueado' WHEN status = 'D' THEN 'Desativado' WHEN status = 'DP' THEN 'Desaparecido' ELSE 'Legado' END AS sigla_descricao FROM cliente;
Espero ter ajudado.
Referência: CASE Expressions
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022