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

浙公网安备 33010602011771号