日期:2014-05-16  浏览次数:20938 次

求教育【关于oracle拼装树】
有表原数据如下  
id deptname updeptno
1 董事会 0
2 总裁办 1
3 财物部 1
4 市场部 2
5 公关部 2
6 分销处 4
.。。。。。。。。


现要将数据组装成  
id deptname updeptno
1 董事会 0
2 总裁办 1,2(董事会/总裁办)
3 财物部 1,3(董事会/财物部)
4 市场部 1,2,4(董事会/总裁办/市场部)
5 公关部 1,2,5(董事会/总裁办/公关部)
6 分销处 1,2,4,6(董事会/总裁办/市场部/分销处)



有无新表都可以,就是将updeptno的上级id都找出来,用逗号隔开,问题描述的不是很清楚,望高手给出解题思路或参考资料或源码,不胜感激!!!

------解决方案--------------------
实测数据:
SQL code

CREATE TABLE T126
(
    ID NUMBER(4),
    DeptName VARCHAR2(20),
    UpDeptNo NUMBER(4)
);

INSERT INTO T126 VALUES(1, '董事会', 0);
INSERT INTO T126 VALUES(2, '总裁办', 1);
INSERT INTO T126 VALUES(3, '账务部', 1);
INSERT INTO T126 VALUES(4, '市场部', 2);
INSERT INTO T126 VALUES(5, '公关部', 2);
INSERT INTO T126 VALUES(6, '分销处', 4);

CREATE VIEW ViewT126 AS 
(SELECT ID,DeptName, s FROM
(SELECT ID, DeptName, UpDeptNo || ', ' || ID AS s
FROM T126
START WITH UpDeptNo = 1
CONNECT BY PRIOR ID = UpDeptNo
ORDER BY ID)
UNION 
SELECT ID, DeptName, to_char(UpDeptNo) AS s FROM T126 WHERE ID = 1);

------解决方案--------------------
select id,deptname,substr(decode(sys_connect_by_path(id, ','),',1',',0',sys_connect_by_path(id, ',')),2)
as updeptno from test
start with id =1
connect by prior id = updeptno
order by id

这样试试,貌似可行。。