Oracle DECODE函数用法

语法格式:DECODE(expr,search,result  [,search,result ]......[,default] )

expr是要进行匹配的表达式或列值,如果expr的值等于search,则返回result,如果expr的值不等于search,则继续向下匹配下一个search语句,如果成立则立即返回下一个result,依此类推,当所有的search都与expr不匹配时,则返回由default指定的默认值。如果没有指定default值,且出现无法匹配的情况,函数返回null值。

 

 

DECODE另一个比较有用的功能是可以实现行列的转换,它可以将原本出现在行中的数据转换为列,实现简单的交叉查询效果。

NAME COURSE GREAD
---------  ----------- -----------
dai      java    60
dai      c#       70
dai      c         80
dai      sql      90

tu        java    90
tu        c#       80
tu        c         70
tu        sql      60

1、通过使用DECODE实现行列转换,查询出每个学生选的课程和相应的成绩

 1 SELECT name,
 2     DECODE(course, 'java', gread) AS java,
 3     DECODE(course, 'c#', gread) AS c#,
 4     DECODE(course, 'c', gread) AS c,
 5     DECODE(course, 'sql', gread) AS sql
 6 FROM t;
 7 NAME         JAVA         C#          C        SQL
 8 ---------- ---------- ---------- ---------- ----------
 9 dai              60
10 dai                       70
11 dai                                  80
12 dai                                              90
13 tu               90
14 tu                        80
15 tu                                   70
16 tu                                               60

 

2、通过使用聚合函数MAX()来实现化散为整

 1 SELECT name,
 2         MAX(DECODE(course, 'java', gread)) AS java,
 3         MAX(DECODE(course, 'c#', gread)) AS c#,
 4         MAX(DECODE(course, 'c', gread)) AS c,
 5         MAX(DECODE(course, 'sql', gread)) AS sql
 6 FROM t
 7 GROUP BY name;
 8  
 9 NAME             JAVA         C#          C        SQL
10 ---------- ---------- ---------- ---------- ----------
11 dai                60         70         80         90
12 tu                 90         80         70         60

 



posted @ 2020-05-11 00:52  Mingo丶  阅读(471)  评论(0)    收藏  举报