|
另外,根据newkid指出的字段长度的问题修改了一下SQL:
[PHP]
SQL> SELECT SUBSTR(MAX(D), INSTR(MAX(D), '/', -1) + 1) C,
2 SUBSTR(P, 2, INSTR(P, '/', 1, 2) - 2) P,
3 POWER(10, SUM(LOG(10, Q))) Q
4 FROM
5 (
6 SELECT SYS_CONNECT_BY_PATH(ID, '/') || '/' ID,
7 SYS_CONNECT_BY_PATH(CHILD, '/') || '/' P,
8 SYS_CONNECT_BY_PATH(PARENT, '/') D,
9 CHILD_QTY/PARENT_QTY Q
10 FROM T_LEVEL1
11 START WITH ID IN
12 (
13 SELECT ID FROM
14 (
15 SELECT ID,
16 CASE WHEN LEAD(LEVELS) OVER(ORDER BY RN) > LEVELS THEN 0 ELSE 1 END LEAF
17 FROM
18 (
19 SELECT ROWNUM RN, ID, LEVELS, PARENT, CHILD
20 FROM T_LEVEL1
21 START WITH LEVELS = 1
22 CONNECT BY PRIOR CHILD = PARENT
23 ORDER SIBLINGS BY LEVELS
24 )
25 )
26 WHERE LEAF = 1
27 )
28 CONNECT BY PRIOR PARENT = CHILD
29 )
30 GROUP BY SUBSTR(ID, 2, INSTR(ID, '/', 1, 2) - 2), SUBSTR(P, 2, INSTR(P, '/', 1, 2) - 2) ;
C P Q
------------------------------ ------------------------------ ----------
A Z 21.6
A Z 3
A G 32.4
A E 10.8
.
[/PHP]
当然这里还要假设字段中不包含'/' |
|