條件表達式 :IF-THEN-ELSE 邏輯
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
//爲職位是Manager的員工發放5000元的獎金
SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000 end as "工資" from emp;
//員工的工資
SQL> select ename ,job,
2 case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)
3 else nvl(sal,0)+nvl(comm,0)
4 end
5 from emp;
//改寫成 decode的寫法
SQL> select ename,job
2 ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),
3 'CLERK',nvl(sal,0)+nvl(comm,0)+200,
4 nvl(sal,0)+nvl(comm,0)) as "工資"
5 from emp;
//作業: 當員工爲Manger 加5000員 當員工爲SALESMAN 加1000 當員工爲 clerk加500
SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)
when 'SALESMAN' then nvl(sal,0)+1000+nvl(comm,0)
when 'CLERK'then nvl(sal,0)+500+nvl(comm,0)
else nvl(sal,0)+nvl(comm,0)
end from emp;
ENAME JOB CASEJOBWHEN'MANAGER'THENNVL(SA
---------- --------- ------------------------------
SMITH CLERK 1300
ALLEN SALESMAN 2900
WARD SALESMAN 2750
JONES MANAGER 7975
MARTIN SALESMAN 3650
BLAKE MANAGER 7850
CLARK MANAGER 7450
SCOTT ANALYST 3000
KING PRESIDENT 5000
TURNER SALESMAN 2500
ADAMS CLERK 1600
JAMES CLERK 1450
FORD ANALYST 3000
MILLER CLERK 1800
kou%kou% 0
xiao%lin 0
xiao%lin 0
17 rows selected
SQL> select ename,job,decode(
2 job,'MANAGER',nvl(sal,0)+5000+nvl(comm,0),
3 'SALESMAN',nvl(sal,0)+1000+nvl(comm,0),
4 'CLERK',nvl(sal,0)+500+nvl(comm,0))
5 as "工資" from emp;
ENAME JOB 工資
---------- --------- ----------
SMITH CLERK 1300
ALLEN SALESMAN 2900
WARD SALESMAN 2750
JONES MANAGER 7975
MARTIN SALESMAN 3650
BLAKE MANAGER 7850
CLARK MANAGER 7450
SCOTT ANALYST
KING PRESIDENT
TURNER SALESMAN 2500
ADAMS CLERK 1600
JAMES CLERK 1450
FORD ANALYST
MILLER CLERK 1800
kou%kou%
xiao%lin
xiao%lin
17 rows selected