CASE WHEN versus DECODE

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:

As vezes o CASE WHEN quebra o galho... Mas o que fazer quando não é possível usá-lo? (como nas versões anteriores ao 8i, e no PL*SQL anterior ao 9i). Simplex!

Eis o nosso query:

Selecionar tudo

SQL> select 
  2    empno
  3  , sal
  4  , case 
  5      when sal<1000  then 'SALARIO BAIXO'
  6      when sal>=1000 then 'SALARIO ALTO'
  7    end comentario 
  8  from emp
  9  /

     EMPNO        SAL COMENTARIO
---------- ---------- -------------
      7369        800 SALARIO BAIXO
      7499       1600 SALARIO ALTO
      7521       1250 SALARIO ALTO
      7566       2975 SALARIO ALTO
      7654       1250 SALARIO ALTO
      7698       2850 SALARIO ALTO
      7782       2450 SALARIO ALTO
      7788       3000 SALARIO ALTO
      7839       5000 SALARIO ALTO
      7844       1500 SALARIO ALTO
      7876       1100 SALARIO ALTO
      7900        999 SALARIO BAIXO
      7902       3000 SALARIO ALTO
      7934       1000 SALARIO ALTO
E agora, um query exatamente IGUAL sem o tal case-when... :-)

Selecionar tudo

SQL> select 
  2    empno
  3  , sal
  4  , decode(sign(sal-1000), -1, 'SALARIO BAIXO', 'SALARIO ALTO')
  5  from emp
  6  /

     EMPNO        SAL DECODE(SIGN(S
---------- ---------- -------------
      7369        800 SALARIO BAIXO
      7499       1600 SALARIO ALTO
      7521       1250 SALARIO ALTO
      7566       2975 SALARIO ALTO
      7654       1250 SALARIO ALTO
      7698       2850 SALARIO ALTO
      7782       2450 SALARIO ALTO
      7788       3000 SALARIO ALTO
      7839       5000 SALARIO ALTO
      7844       1500 SALARIO ALTO
      7876       1100 SALARIO ALTO
      7900        999 SALARIO BAIXO
      7902       3000 SALARIO ALTO
      7934       1000 SALARIO ALTO
SQL> 
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Mais uma forma de se fazer isso SEM case-when:

Selecionar tudo

select
  empno
, sal
, decode(greatest(sal,1000), 1000, 'SALARIO BAIXO', 'SALARIO ALTO')
from emp
/
Avatar do usuário
fabissilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 09 Set 2019 4:29 pm
Localização: Sorocaba - SP
Fabi
INSERT INTO possivel VALUES ('Nada é impossível para aquele que persiste');

bem prático.
melhor do que utilizar o case.
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 19 visitantes