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
  

Mensagemem Sáb, 15 Mai 2004 8:28 pm

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:
Código: Selecionar todos
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... :-)
Código: Selecionar todos
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>
dr_gori
Localização: Portland, OR USA

Mensagemem Ter, 18 Mai 2004 7:39 pm

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

Código: Selecionar todos
select
  empno
, sal
, decode(greatest(sal,1000), 1000, 'SALARIO BAIXO', 'SALARIO ALTO')
from emp
/
dr_gori
Localização: Portland, OR USA

Thomas F. G

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


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


            Voltar para SQL

            Quem está online

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