DECODE(Ìõ¼þ,Öµ1,·µ»ØÖµ1,Öµ2,·µ»ØÖµ2,...Öµn,·µ»ØÖµn,ȱʡֵ)
DECODE(×ֶλò×ֶεÄÔËË㣬ֵ1£¬Öµ2£¬Öµ3£©
Õâ¸öº¯ÊýÔËÐеĽá¹ûÊÇ£¬µ±×ֶλò×ֶεÄÔËËãµÄÖµµÈÓÚÖµ1ʱ£¬¸Ãº¯Êý·µ»ØÖµ2£¬·ñÔò·µ»ØÖµ3
µ±È»Öµ1£¬Öµ2£¬Öµ3Ò²¿ÉÒÔÊDZí´ïʽ£¬Õâ¸öº¯ÊýʹµÃijЩSQLÓï¾ä¼òµ¥ÁËÐí¶à
¸Ãº¯ÊýµÄº¬ÒåÈçÏ£º
IF Ìõ¼þ=Öµ1 THEN¡¡¡¡¡¡¡¡
RETURN(·µ»ØÖµ1)
ELSIF Ìõ¼þ=Öµ2 THEN¡¡¡¡¡¡¡¡
RETURN(·µ»ØÖµ2)¡¡¡¡¡¡¡¡
......
ELSIF Ìõ¼þ=Öµn THEN¡¡¡¡¡¡¡¡
RETURN(·µ»ØÖµn)
ELSE¡¡¡¡¡¡¡¡
RETURN(ȱʡֵ)
END IF
DECODEº¯ÊýµÄ³£¼ûÓÃ;£º°´×Ö¶ÎÄÚÈÝ·Ö×é¡¢°´×Ö¶ÎÄÚÈÝÅÅÐò¡¢¹Ì¶¨ÐÐתÁÐ
1. ʹÓÃDECODEʵÏÖ°´×Ö¶ÎÄÚÈÝ·Ö×é
ÓÐʱºò·Ö×é¿ÉÄܱȽϸ´ÔÓ£¬±ÈÈçÐèÒª¶ÔijЩ×Ö¶ÎÄÚÈݺϲ¢·Ö×é´¦Àí£¬ÕâÑùʹÓüòµ¥µÄ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
ÊDz»Ðеģ¬Ê¹ÓÃ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ÊÇ×Ö·ûÐÍ'ijij²¿·Ö'£©£¬ÄÇôÔõÑùʵÏÖÅÅÐòÄØ£¿
°´×Ö¶ÎÄÚÈÝÅÅÐòºÍ°´×Ö¶ÎÄÚÈÝÖ¸¶¨¶¯Ì¬ÁÐÅÅÐò
- ½¨Á¢²âÊÔ±í
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;
- b. °´×Ö¶ÎÄÚÈÝÖ¸¶¨¶¯Ì¬ÁÐÅÅÐò
ÐèÇó£ºÈôDEPT_NAMEΪdeptA£¬Ôò°´IDÉýÐòÅÅÁУ¬·ñÔò°´REGION_IDÉýÐòÅÅÐò
SELECT ID,DEPT_NAME,REGION_ID
FROM t2
ORDER BY DECODE(DEPT_NAME,
'deptA',ID,
REGION_ID);
3. ʹÓÃDECODEʵÏ̶ֹ¨ÐÐתÁÐ
- ¼òµ¥µÄÔ±¹¤¹¤×÷ͳ¼Æ±í
DROP TABLE t3;
CREATE TABLE t3
(
STUDENT_NO NUMBER(10),
STUDENT_NAME VARCHAR2(10),
COURSE_TYPE VARCHAR2(10),
COURSE_SCORE NUMBER(10)
);
INSERT INTO t3 VALUES(1,'jack','english',80);
INSERT INTO t3 VALUES(1,'jack','chinese',90);
INSERT INTO t3 VALUES(1,'jack','math',85);
INSERT INTO t3 VALUES(2,'tony','english',70);
INSERT INTO t3 VALUES(2,'tony','chinese',95);
INSERT INTO t3 VALUES(2,'tony','math',80);
COMMIT;
ʵÏÖÐÐתÁУº
SELECT STUDENT_NAME,DECODE(COURSE_TYPE,'english',COURSE_SCORE) FROM t3;
·ÖÎöÕâÌõÓï¾ä£¬·Ö×éÓë²»·Ö×éµÄ²î±ðÔÚÄÄÀ
SELECT STUDENT_NAME,
MAX(DECODE(COURSE_TYPE,'english',COURSE_SCORE)) ENGLISH,
MAX(DECODE(COURSE_TYPE,'chinese',COURSE_SCORE)) CHINESE,
MAX(DECODE(COURSE_TYPE,'math',COURSE_SCORE)) MATH
FROM t3
GROUP BY STUDENT_NAME;
ΪʲôÐèÒªMAX£¿
ÒòΪҪʵÏÖÐÐתÁУ¬°´×ֶηÖ×飬¶ÔDECODEÖеķǷÖ×éÁбØÐëÒªÓзÖ×麯Êý£¬µ±È»MIN¡¢SUM
AVGµÈ×麯ÊýÒ²¿ÉÒÔʵÏÖ£¬MAX¡¢MIN¶ÔÈκÎÀàÐͶ¼ÊÊÓã¬SUM¡¢AVGÖ»ÄܶÔÊýÖµÐÍ
?