oracle筆記(十三)條件表達式

條件表達式 :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 當員工爲 clerk500

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

 

發佈了14 篇原創文章 · 獲贊 0 · 訪問量 1928
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章