Oracle decode函数 一 两种语法格式1 decode(expression,value,result1,result2)如果expressionvalue则输出result1否则输出result2例子123输出a12≠4输出b2 decode(expression,value1,result1,value2,result2,value3,result3......,default)如果expressionvalue1则输出result1expressionvalue2输出reslut2expressionvalue3输出result3若expression不等于所列出的所有value则输出为default例子score100输出NO.1score90输出‘NO.2’score70输出‘NO.3’其他值输出Other二 应用1 使用decode函数分段将成绩表中分数大于90分的分为优秀80~90分为良好70~80分为中等60~70分为及格60分以下为不及格。sign()函数的作用是判断参数的值大于0则返回1等于0则返回0小于0则返回-1如图当socre大于或等于90时socre-900sign()函数返回1或0则输出‘优秀’在score-900的情况下再判断socre-80socre-800sign()函数返回1或0则输出‘良好’以此类推用decode()的嵌套配合sign()函数来实现对分数的分段以及相应的输出最后60分以下的就default为‘不及格’就可以了可以看到我们的Tony老师的分数就不及格了2 使用decode函数对表做行列转换如图所示有一张三个科目的成绩表各科目名称和相应的分数呈现在行中现想将各科目名称转换为列名每列的内容为对应科目的分数。如图先用decode函数判断subject为Chinese时输出score不为Chinese时输出为NULL因为共有三个科目所以输出其中一个科目的分数时其他科目的分数为NULL这里只需要用sum()函数来实现聚合的作用将空值去除掉就可以了sum()函数分别将name为John的每个列的值相加如Chinese列80NULLNULL80再将name为Will的每个列的值相加然后group by将name分组最终达到如上图聚合的效果