CASE WHEN versus DECODE
07/09/2007
As vezes o CASE WHEN quebra o galho quando temos que usar condições mais complexas… 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). É muito simples!
Eis o nosso query:
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…
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>
Mais uma forma de se fazer isso SEM case-when:
select empno , sal , decode(greatest(sal,1000), 1000, 'SALARIO BAIXO', 'SALARIO ALTO') from emp /
Comente aqui
