含义解释:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
decode()函数简介:
主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);
使用方法:
Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
From talbename
Where …
1. 比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
eg:select decode(sign(deptno-comm),1,'正数',-1,'负数',0,'其他') from emp
2. count,sum,decode,group by, order by
select deptno,count(*),sum(decode(deptno,21,1,10,1,0)) from emp where deptno is not null group by deptno order by deptno
3.例子
- CREATE TABLE t(
- name VARCHAR2(10),
- course VARCHAR2(10),
- gread NUMBER
- )
- BEGIN
- INSERT INTO t VALUES('dai', 'java', 60);
- INSERT INTO t VALUES('dai', 'c#', 70);
- INSERT INTO t VALUES('dai', 'c', 80);
- INSERT INTO t VALUES('dai', 'sql', 90);
- INSERT INTO t VALUES('tu', 'java', 90);
- INSERT INTO t VALUES('tu', 'c#', 80);
- INSERT INTO t VALUES('tu', 'c', 70);
- INSERT INTO t VALUES('tu', 'sql', 60);
- END;
2、通过使用聚合函数MAX()来实现化散为整
通过第一步的结果,我们发现使用DECODE构造出了由course字段组成了行,但是我们发现每一个课程和相应的成绩还是出现一行。但是你仔细观察,是不是只要将同一姓名的每一行往上压缩一下,就变成了一行了。那我们要怎么做到嘞?在这里我们应该想到使用分组(GROUP BY)来实现。