zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    前端——HTML
    前端——Bootstrap
    前端——jQuery
    ORM——对象关系映射01
    并编程复习——协程,池
    设计模式--代理模式&装饰器模式
    设计模式--原型模式
    设计模式--建造者模式
    设计模式--工厂类相关模式
    设计模式--单例模式
  • 原文地址:https://www.cnblogs.com/downpour/p/3155683.html
Copyright © 2011-2022 走看看