O comando CASE foi incorporado ao Firebird a partir da versão 1.5. A função do CASE é retornar um valor baseado em uma lista de condições exclusivas (semelhante ao CASE de uma linguagem de programação).
Para um exemplo, tome por base que temos uma tabela chamada CAIXA e que possui os seguintes campos: ID, DATA, TIPO, DESCRICAO e VALOR. Faremos um select para que retorne os dados, e que no campo TIPO, apareça o texto “Débito” ou “Crédito”, dependendo do valor do campo. O CASE pode poupar o trabalho de alterarmos isso na aplicação Delphi.
Listagem 1: Exemplo de CASE comparando com valor exato
select ID, DATA, DESCRICAO, VALOR,
case TIPO
when 'C' then 'Crédito'
when 'D' then 'Débito'
else
Campo em branco ou valor incorreto'
end as TIPO_DE_LANCAMENTO
from CAIXA;
Note que o campo TIPO, aparecerá como TIPO_DE_PAGAMENTO no result do select. Ao executarmos o comando teremos os dados como mostra a Figura 1.
Figura 1: Retorno do select utilizando o comando CASE
Caso o valor esteja em branco ou diferente da lista do CASE, o retorno seria a mensagem colocada no else do CASE (Figura 2).
Figura 2: Retorno do select com a mensagem de valor não encontrado
Nota: O CASE é case-sensitive, ou seja, diferencia letras maiúsculas e minúsculas.
Você pode utilizar o CASE normalmente em views. O CASE pode também ser utilizado junto com funções de agregação. Imagine que você precise fazer um select para saber como está a distribuição dos seus clientes pelas regiões do país:
Listagem 2: Exemplo de CASE comparando com uma lista
select case
when (UF in ('RS', 'SC', 'PR')) then
'Sul'
when (UF in ('SP','RJ', 'ES', 'MG')) then
'Sudeste'
when (UF in ('MT','MS','GO','DF')) then
'Centro-Oeste'
when (UF in ('AC','RO','AM','RR','AP','PA')) then
'Norte'
when (UF in ('MA','PI','CE','RN','PB','PE','AL', 'SE','BA')) then
'Nordeste'
end as REGIAO, count (*) as TOTAL_CLIENTES
from CLIENTES;
Código by Cantu.
Forte abraço a todos!