博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle实验16:分支函数
阅读量:5371 次
发布时间:2019-06-15

本文共 1914 字,大约阅读时间需要 6 分钟。

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

 

返回目录  

 

转载于:https://www.cnblogs.com/downpour/p/3155683.html

你可能感兴趣的文章
[HDU 6447][2018CCPC网络选拔赛 1010][YJJ's Salesman][离散化+线段树+DP]
查看>>
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
ES6思维导图
查看>>
第四周作业
查看>>
20151121
查看>>
线段重叠 (思维好题)
查看>>
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
查看>>
SBuild 0.1.5 发布,基于 Scala 的构建系统
查看>>
WordPress 3.5 RC3 发布
查看>>
DOM扩展札记
查看>>
primitive assembly
查看>>
浅谈localStorage的用法
查看>>
Ad Exchange基本接口和功能
查看>>