有表原数据如下   
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都找出来,用逗号隔开,问题描述的不是很清楚,望高手给出解题思路或参考资料或源码,不胜感激!!!

解决方案 »

  1.   

    用wm_concat 好像可以搞定、
      

  2.   

    实测数据: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);
    实测结果:
    虽然结果出来了,但感觉太复杂了,可以再想想有没有更好的办法。
      

  3.   

    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这样试试,貌似可行。。