Firebird: Case When

0

Posted on : 28-07-2011 | By : Paulo H Oliveira | In : Banco de Dados, Firebird

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.

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.

FBfig1.gif
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.

FBfig2.gif
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:

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!

Outro exemplo muito bom:

select
sum ( case when vendedor = 1 then pretot else 0 end ) as Vendedor_1,
sum ( case when vendedor = 2 then pretot else 0 end ) as Vendedor_2,
sum ( case when vendedor = 3 then pretot else 0 end ) as Vendedor_3,
sum ( case when vendedor = 4 then pretot else 0 end ) as Vendedor_4
from vtvencor
where tipo in (’VBA’, ‘VBT’, ‘VCO’)
and situacao=1
and codemp=1

Compartilhe :

  • Stumble upon
  • twitter

Escreva um comentário

Security Code: