Tom,
Here's what I have:CREATE TABLE BRANCHES(PARENT_NODE VARCHAR(10), CHILD_NODE VARCHAR(10))
insert into BRANCHES values (' ','LEVEL1');
insert into BRANCHES values ('LEVEL1','LEVEL2');
insert into BRANCHES values ('LEVEL2','LEVEL3.1');
insert into BRANCHES values ('LEVEL2','LEVEL3.2');
insert into BRANCHES values ('LEVEL2','LEVEL3.3');
insert into BRANCHES values ('LEVEL3.1','LEVEL4.1');
insert into BRANCHES values ('LEVEL3.1','LEVEL4.2');
insert into BRANCHES values ('LEVEL3.3','LEVEL4.3');
insert into BRANCHES values ('LEVEL3.3','LEVEL4.4');
insert into BRANCHES values ('LEVEL4.1','LEVEL5.1');
insert into BRANCHES values ('LEVEL4.1','LEVEL5.2');
insert into BRANCHES values ('LEVEL4.2','LEVEL5.3');
insert into BRANCHES values ('LEVEL4.2','LEVEL5.4');
insert into BRANCHES values ('LEVEL4.3','LEVEL5.5');
insert into BRANCHES values ('LEVEL4.3','LEVEL5.6');
insert into BRANCHES values ('LEVEL4.4','LEVEL5.7');
insert into BRANCHES values ('LEVEL4.4','LEVEL5.8');
insert into BRANCHES values ('LEVEL5.2','LEVEL6.1');
insert into BRANCHES values ('LEVEL5.2','LEVEL6.2');
insert into BRANCHES values ('LEVEL5.3','LEVEL6.3');
insert into BRANCHES values ('LEVEL5.3','LEVEL6.4');
insert into BRANCHES values ('LEVEL5.4','LEVEL6.5');
By using SYS_CONNECT_BY_PATH I can generate all possible tree traversing paths:select SYS_CONNECT_BY_PATH(CHILD_NODE, ' - ')
from BRANCHES
start with PARENT_NODE = ' '
connect by prior CHILD_NODE = PARENT_NODE
SYS_CONNECT_BY_PATH(CHILD_NODE,'-')
--------------------------------------------------------------------------------
- LEVEL1
- LEVEL1 - LEVEL2
- LEVEL1 - LEVEL2 - LEVEL3.1
- LEVEL1 - LEVEL2 - LEVEL3.1 - LEVEL4.1
- LEVEL1 - LEVEL2 - LEVEL3.1 - LEVEL4.1 - LEVEL5.1
- LEVEL1 - LEVEL2 - LEVEL3.1 - LEVEL4.1 - LEVEL5.2
- LEVEL1 - LEVEL2 - LEVEL3.1 - LEVEL4.1 - LEVEL5.2 - LEVEL6.1
- LEVEL1 - LEVEL2 - LEVEL3.1 - LEVEL4.1 - LEVEL5.2 - LEVEL6.2
etc.
But what I am trying to get is this:ROOT L1 L2 L3 L4 L5 L6
----- ------- ------- --------- --------- ---------- ----------
LEVEL1
LEVEL1 LEVEL2
LEVEL1 LEVEL2 LEVEL3.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.3
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.4
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4 LEVEL6.5
LEVEL1 LEVEL2 LEVEL3.2
LEVEL1 LEVEL2 LEVEL3.3
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.5
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.6
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.7
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.8
Any advice on how this can be done? Thank you.
is six the maximum?
a sql query needs to have "N columns" where N is absolutely known at PARSE time.
If you just need six, then......
substr, just substr the sys connect by path.
ops$tkyte%ORA11GR1> select substr( scbp, instr(scbp,'-',1,1)+1, instr(scbp,'-',1,2)-instr(scbp,'-',1,1)-1) l1,
2 substr( scbp, instr(scbp,'-',1,2)+1, instr(scbp,'-',1,3)-instr(scbp,'-',1,2)-1) l2,
3 substr( scbp, instr(scbp,'-',1,3)+1, instr(scbp,'-',1,4)-instr(scbp,'-',1,3)-1) l3,
4 substr( scbp, instr(scbp,'-',1,4)+1, instr(scbp,'-',1,5)-instr(scbp,'-',1,4)-1) l4,
5 substr( scbp, instr(scbp,'-',1,5)+1, instr(scbp,'-',1,6)-instr(scbp,'-',1,5)-1) l5,
6 substr( scbp, instr(scbp,'-',1,6)+1, instr(scbp,'-',1,7)-instr(scbp,'-',1,6)-1) l6
7 from (
8 select SYS_CONNECT_BY_PATH(CHILD_NODE, '-') || '-' scbp
9 from BRANCHES
10 start with PARENT_NODE = ' '
11 connect by prior CHILD_NODE = PARENT_NODE
12 )
13 /
L1 L2 L3 L4 L5 L6
---------- ---------- ---------- ---------- ---------- ----------
LEVEL1
LEVEL1 LEVEL2
LEVEL1 LEVEL2 LEVEL3.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.1
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.1 LEVEL5.2 LEVEL6.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.3
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.3 LEVEL6.4
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4
LEVEL1 LEVEL2 LEVEL3.1 LEVEL4.2 LEVEL5.4 LEVEL6.5
LEVEL1 LEVEL2 LEVEL3.2
LEVEL1 LEVEL2 LEVEL3.3
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.5
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.3 LEVEL5.6
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.7
LEVEL1 LEVEL2 LEVEL3.3 LEVEL4.4 LEVEL5.8
22 rows selected.