zoukankan      html  css  js  c++  java
  • Oracle decode函数

    decode函数在Oracle SQL查询语句中的使用非常广泛,也经常应用到PL/SQL语句块中。
    decode()函数语句的基本表达式是:

    decode(expr1,expr2,expr3,[expr4])

    作如下理解该表达式:
      (1),如果expr1 = expr2,decode函数返回expr3表达式的值;
      (2),如果expr1 != expr2,decode函数返回expr4表达式的值,如果expr4未指定,则返回null;

    补充:

    Decode函数的语法结构还包括如下:
    decode (expression, search_1, result_1)
    decode (expression, search_1, result_1, search_2, result_2)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)

    decode (expression, search_1, result_1, default)
    decode (expression, search_1, result_1, search_2, result_2, default)
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

    decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。

    二 应用

    1 使用decode函数分段

       将成绩表中分数大于90分的分为优秀,80~90分为良好,70~80分为中等,60~70分为及格,60分以下为不及格。

               

              (sign()函数的作用是,判断参数的值大于0则返回1,等于0则返回0,小于0则返回-1;

                 如图,当socre大于或等于90时,socre-90>=0,sign()函数返回1或0,则输出‘优秀’,

                 在score-90<0的情况下,再判断socre-80,socre-80>=0,sign()函数返回1或0,则输出‘良好’,

                 以此类推,用decode()的嵌套配合sign()函数来实现对分数的分段以及相应的输出,

                 最后60分以下的就default为‘不及格’就可以了,可以看到我们的Tony老师的分数就不及格了)

    2 使用decode函数对表做行列转换

                 

    如图所示,有一张三个科目的成绩表,各科目名称和相应的分数呈现在行中,

    现想将各科目名称转换为列名,每列的内容为对应科目的分数。

                 

                 (如图,先用decode函数判断subject为Chinese时,输出score,不为Chinese时,输出为NULL,

                    因为共有三个科目,所以输出其中一个科目的分数时,其他科目的分数为NULL,这里只需要

                    用sum()函数来实现聚合的作用,将空值去除掉就可以了)

                  

                   (group by先将name分组了,然后sum()函数分别将name为John的每个列的值相加,如Chinese列,

                      80+NULL+NULL=80,再将name为Will的每个列的值相加,最终达到如上图聚合的效果)

  • 相关阅读:
    学习进度条
    软件工程---课程设计总结
    软件工程----课程总结
    操作系统--实验四
    软件工程---阅读《构建之法》P384~391
    软件工程---阅读《构建之法》第8、9、10章读后感
    操作系统---实验三 进程调度模拟程序
    软件工程--- 阅读《构建之法》第6~7章
    转载---CSS3实现曲线阴影和翘边阴影
    转载---QRcodeJS生成二维码
  • 原文地址:https://www.cnblogs.com/luzhanshi/p/11895736.html
Copyright © 2011-2022 走看看