17,377
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE a(NAME VARCHAR2(10),yuwen INT,shuxue INT,yingyu INT);
INSERT INTO a VALUES('a1',70,80,90);
INSERT INTO a VALUES('a2',71,81,91);
SELECT NAME, 'yuwen' KEMU, YUWEN CHENGJI
FROM A
UNION
SELECT NAME, 'shuxue' KEMU, SHUXUE
FROM A
UNION
SELECT NAME, 'yingyu' KEMU, YINGYU FROM A
输出:
NAME KEMU CHENGJI
a1 shuxue 80
a1 yingyu 90
a1 yuwen 70
a2 shuxue 81
a2 yingyu 91
a2 yuwen 71
INSTR会在下面的字符串中最前面开始找逗号的位置:当RN为1时,找第1个逗号的位置并返回位置;当RN为2时,找第2个逗号的位置并返回位置;当找不到时就返回0.
A: ',' || YUWEN || ',' || SHUXUE || ',' || YINGYU || ','
SQL> SELECT * FROM TEST111;
NAME YUWEN SHUXUE YINGYU
---------- ---------- ---------- ----------
A1 70 80 90
A2 71 81 91
SQL>
SQL> SELECT NAME,
2 DECODE(RN,1,'YUWEN',2,'SHUXUE',3,'YINGYU',NULL) "KEMU",
3 SUBSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',
4 INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN)+1,
5 INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN+1)
6 -INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN)-1) "XF_COL"
7 FROM TEST111,
8 (
9 SELECT ROWNUM RN
10 FROM ALL_OBJECTS
11 WHERE ROWNUM <= (SELECT MAX(LENGTH(TO_CHAR(YUWEN ||','||SHUXUE||','||
12 YINGYU)) -
13 LENGTH(REPLACE(TO_CHAR(YUWEN||','||SHUXUE ||','||
14 YINGYU),
15 ',',
16 '')))
17 FROM TEST111) + 1
18 )AO
19 WHERE INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN) > 0
20 ORDER BY 1;
NAME KEMU XF_COL
---------- ------ --------------------------------------------------------------------------------
A1 YUWEN 70
A1 SHUXUE 80
A1 YINGYU 90
A2 YUWEN 71
A2 SHUXUE 81
A2 YINGYU 91
6 rows selected
SQL>