oracle实验16:分支函数

实验16:分支的函数

case语句

语法:

CASE expr WHEN comparison_expr1THEN return_expr1
         [WHEN comparison_expr2 THENreturn_expr2
          WHEN comparison_exprn THENreturn_exprn
          ELSE else_expr]
END

 

case分支语句计算工资

SQL>  select ename,job,sal,
      case job when 'CLERK' then 1.10*sal
                   when 'SALESMAN' then 1.15*sal
                   when 'ANALYST' then 1.20*sal
      else sal
      end "revised_salary"
      from emp;

ENAME      JOB              SAL revised_salary                                 
---------- --------- ---------- --------------                                 
SMITH      CLERK            800            880                                 
ALLEN      SALESMAN        1600           1840                                 
WARD       SALESMAN        1250         1437.5                                 
JONES      MANAGER         2975           2975                                 
MARTIN     SALESMAN        1250         1437.5                                 
BLAKE      MANAGER         2850           2850                                 
CLARK      MANAGER         2450           2450                                 
KING       PRESIDENT       5000           5000                                 
TURNER     SALESMAN        1500           1725                                 
JAMES      CLERK            950           1045                                 
FORD       ANALYST         3000           3600                                    
MILLER     CLERK           1300           1430                                 

已选择12行。

decode函数

是oracle自定义的函数,其他数据库可能不支持。

语法:

DECODE(字段|表达式, 条件1,结果1
                  [,条件2,结果2…,]
                  [,缺省值])

 

decode语句计算工资

SQL> SELECT ENAME,JOB,SAL,
    DECODE(JOB,'CHERK' , 1.1*SAL
    ,'SALESMAN', 1.15*SAL,
    'ANALYST', 1.2*SAL, SAL)
    "REVISED_SALARY"
    FROM EMP;

ENAME      JOB              SAL REVISED_SALARY                                 
---------- --------- ---------- --------------                                 
SMITH      CLERK            800            800                                 
ALLEN      SALESMAN        1600           1840                                 
WARD       SALESMAN        1250         1437.5                                 
JONES      MANAGER         2975           2975                                 
MARTIN     SALESMAN        1250         1437.5                                 
BLAKE      MANAGER         2850           2850                                 
CLARK      MANAGER         2450           2450                                 
KING       PRESIDENT       5000           5000                                 
TURNER     SALESMAN        1500           1725                                 
JAMES      CLERK            950            950                                 
FORD       ANALYST         3000           3600                                   
MILLER     CLERK           1300           1300                                 

已选择12行。

 

求税率,每2000一个台阶,8000以上按40%。

SQL> select ename,sal,
    decode(trunc(sal/2000,0),
                        0,0.00,
                        1,0.09,
                        2,0.20,
                        3,0.30,
                          0.40) tax_rate
    from emp;

ENAME             SAL   TAX_RATE                                               
---------- ---------- ----------                                               
SMITH             800          0                                               
ALLEN            1600          0                                               
WARD             1250          0                                               
JONES            2975        .09                                               
MARTIN           1250          0                                               
BLAKE            2850        .09                                               
CLARK            2450        .09                                               
SCOTT            3000        .09                                               
KING              5000         .2                                               
TURNER           1500          0                                               
ADAMS            1100          0                                              
JAMES             950          0                                               
FORD             3000        .09                                               
MILLER           1300          0                                               

已选择14行。

case语句和decode函数都是单行函数,每一行都有一个返回值。

从oracle的角度来讲,decode更好,各个版本都支持。

从横向来说,case更好,他是国标,不同的数据库都认可。

ps:得知不用出差,可以安心的继续学习了,很感谢现在的工作可以给我一些时间学习,忍着肚子疼将单行函数的博客整理完成,继续加油!

返回目录  http://www.cnblogs.com/downpour/p/3155689.html

原文地址:https://www.cnblogs.com/downpour/p/3155683.html