Oracle在decode中的含义
DECODE(标准,值1,返回值1,值2,返回值2,有限责任公司值n,返回值n,缺省值)
DECODE(字符串或字符串的乘除法,值1,值2,值3)
这一涵数运作的結果是,当字符串或字符串的乘除法的值相当于值1时,该涵数返回值2,不然返回值3
这样的话值1,值2,值3还可以是关系式,这一涵数促使一些SQL句子简易了很多
该涵数的含意给出:
IF 标准=值1 THEN
RETURN(返回值1)
ELSIF 标准=值2 THEN
RETURN(返回值2)
......
ELSIF 标准=值n THEN
RETURN(返回值n)
ELSE
RETURN(缺省值)
END IF
DECODE涵数的普遍用处:按字符串內容排序、按字符串內容排列、确定行转列
1. 应用DECODE保持按字符串內容排序
偶尔排序将会非常复杂,例如必须对一些字符串內容合拼排序解决,那样应用简易的GROUP BY 就没用,
可是应用CASE或DECODE就能够获得预估的結果
案例:
- 创建简易的聘员及相匹配职位表
DROP TABLE t1;
CREATE TABLE t1
(
ID NUMBER(10),
NAME VARCHAR2(10),
JOB VARCHAR2(20)
);
INSERT INTO t1 VALUES(1,'jack','VP');
INSERT INTO t1 VALUES(2,'tony','CEO');
INSERT INTO t1 VALUES(3,'merry','VP');
INSERT INTO t1 VALUES(4,'james','OPERATION');
INSERT INTO t1 VALUES(5,'linda','OPERATION');
COMMIT;
如今必须各自数据分析VP及左右岗位的总数、一般聘员的总数,它是应用简易的GROUP BY JOB
是不好的,应用DECODE来保持就非常简单
SELECT DECODE(JOB,'VP','VP_CEO','CEO','VP_CEO','OPERATION') JOB,
COUNT(*) JOB_CNT
FROM t1
GROUP BY DECODE(JOB,'VP','VP_CEO','CEO','VP_CEO','OPERATION');
結果给出:
JOB JOB_CNT
----------- --------------
VP_CEO 3
OPERATION 2
2. 应用DECODE保持按字符串內容排列
在平时设计规划中将会遇到那样的状况,例如一張表有ID,NAME字符串(ID为经销商主键),
必须按NAME值特定排列标准(如NAME是空格符型'某人部位'),那麼如何保持排列呢?
按字符串內容排列和按字符串內容特定静态列排列
- 创建检测表
DROP TABLE t2;
CREATE TABLE t2
(
ID NUMBER,
DEPT_NAME VARCHAR2(10),
REGION_ID NUMBER(10)
);
INSERT INTO t2 VALUES(1,'deptA',12);
INSERT INTO t2 VALUES(2,'deptA',10);
INSERT INTO t2 VALUES(3,'deptA',9);
INSERT INTO t2 VALUES(4,'deptA',7);
INSERT INTO t2 VALUES(5,'deptB',12);
INSERT INTO t2 VALUES(6,'deptB',13);
INSERT INTO t2 VALUES(7,'deptB',22);
INSERT INTO t2 VALUES(8,'deptB',9);
INSERT INTO t2 VALUES(9,'deptC',8);
INSERT INTO t2 VALUES(10,'deptC',10);
INSERT INTO t2 VALUES(11,'deptC',11);
COMMIT;
- a. 按字符串內容排列
要求:按单位DEPT_NAME排列(A->B->C),针对每一单位內部按地区REGION_ID升序
剖析:这儿的单位DEPT_NAME没有数子(varchar2),立即排列时不好的,
假如能将DEPT_NAME的每一值变为相匹配的数子,再排列就就行了。
SELECT ID,DEPT_NAME,REGION_ID
FROM t2
ORDER BY DECODE(DEPT_NAME,
'deptA',1,
'deptb',2,
3),
REGION_ID;
相关文章
- 1条评论
- 孤鱼颜于2022-05-29 01:53:56
- RN(缺省值)END IFDECODE涵数的普遍用处:按字符串內容排序、按字符串內容排列、确定行转列1. 应用DECODE保持按字符串內容排序偶尔排序将会非常复杂,例如必须对一些字符串內容合拼排序解决,那样应用简易的GROUP BY 就没用,可是应用CASE或DECODE就能够获