--07 SQL statement, branch function

decode

SQL> select ename,deptno,
                  decode(deptno,
                             10,'AAAA',
                             20,'BBBB',
                             'CCCC') 
       from emp order by 2;

ENAME       DEPTNO DECO
---------- ---------- ----
CLARK   10 AAAA
KING   10 AAAA
MILLER   10 AAAA
JONES   20 BBBB
FORD   20 BBBB
ADAMS   20 BBBB
SMITH   20 BBBB
SCOTT   20 BBBB
WARD   30 CCCC
TURNER   30 CCCC
ALL    30 CCCC
JAMES   30 CCCC
BLAKE   30 CCCC
MARTIN   30 CCCC

14 rows selected.

case

Simple case realization is equivalent comparison (expression before when)

SQL> select ename,sal,
            case deptno when 10 then 'AAA'
                        when 20 then 'BBB'
                        else 'CCC'
                    end
      from emp order by deptno;
SQL>

ENAME  SAL CAS
---------- ---------- ---
CLARK 2450 AAA
KING 5000 AAA
MILLER 1300 AAA
JONES 2975 BBB
FORD 3000 BBB
ADAMS 1100 BBB
SMITH  800 BBB
SCOTT 3000 BBB
WARD 1250 CCC
TURNER 1500 CCC
ALLEN 1600 CCC
JAMES  950 CCC
BLAKE 2850 CCC
MARTIN 1250 CCC

14 rows selected.

Search case realization is not the equivalent of comparison (an expression followed when)

SQL>  select ename,sal,case when sal<=1000  then sal+1
                            when sal>1000 and sal<=2000 then sal+2
                            when sal>2000 and sal<=3000 then sal+3
                            else sal+4
                        end  "up_sal"
        from emp order by sal;


ENAME  SAL  up_sal
---------- ---------- ----------
SMITH  800     801
JAMES  950     951
ADAMS 1100    1102
WARD 1250    1252
MARTIN 1250    1252
MILLER 1300    1302
TURNER 1500    1502
ALLEN 1600    1602
CLARK 2450    2453
BLAKE 2850    2853
JONES 2975    2978
SCOTT 3000    3003
FORD 3000    3003
KING 5000    5004

14 rows selected.

Guess you like

Origin www.cnblogs.com/marxist/p/12110927.html
Recommended