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

 

你可能感兴趣的:(oracle,sql)