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.

Retorno do select utilizando o comando CASE

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).

Retorno do select com a mensagem de valor não encontrado

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!