Oracle decode函数

出处:https://blog.csdn.net/wcacer/article/details/100181058

一 两种语法格式

1 decode(expression,value,result1,result2)

   如果expression=value,则输出result1,否则输出result2

   例子:

            

           (1+2=3,输出a)

             

            (1+2≠4,输出b)

2 decode(expression,value1,result1,value2,result2,value3,result3......,default)

   如果expression=value1,则输出result1,expression=value2,输出reslut2,expression=value3,输出result3,

   若expression不等于所列出的所有value,则输出为default

  例子:

            

            (score=100,输出'NO.1',score='90',输出‘NO.2’,score='70',输出‘NO.3’,其他值输出'Other')

 

二 应用

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()函数来实现聚合的作用,将空值去除掉就可以了)

              

            (sum()函数分别将name为John的每个列的值相加,如Chinese列,80+NULL+NULL=80,

              再将name为Will的每个列的值相加,然后group by将name分组,最终达到如上图聚合的效果)

posted @   Bk小凯笔记  阅读(295)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示