表:tb
p_id  id  name
null  1   aa
1     2   bb
2     3   cc
3     4   dd
3     5   ee希望出现的查询结果
列1   列2  列3  列4  列5  列6  列7  列8  列9
null   1   aa    2   bb    3   cc    4   dd
null   1   aa    2   bb    3   cc    5   ee就是只按照level最大的行显示,但是如何能将上层节点作为列显示呢?
做多个表然后关联查询速度太慢,希望能直接用语句实现,谢谢!

解决方案 »

  1.   

    我只是希望显示出9列的查询结果..请大家帮帮忙!用过程或者function都行
      

  2.   

    select replace(replace(aa,'\',' '),',',' ')
    from 

    SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa 
    FROM tree 
    START WITH p_id = 'null' 
    CONNECT BY PRIOR id = p_id
    order by aa desc
    ) t
    where rownum<3; 
    试试看!!
      

  3.   

    老兄,思路要宽一些嘛!
    既然
    select replace(replace(aa,'\',' '),',',' ')
    from 

    SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa 
    FROM tree 
    START WITH p_id = 'null' 
    CONNECT BY PRIOR id = p_id
    order by aa desc
    ) t
    where rownum<3; 
    都可以在一列中查出你要的9列的内容,而且有分隔符" ",
    你把它拆分一下不就行了?!
      

  4.   

    哎,写function拆分成为单独字串的方法我写了,效率太低啊!
    直接写
    SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa 
    FROM tree 
    START WITH p_id = 'null' 
    CONNECT BY PRIOR id = p_id
    order by aa desc
    时间大约是0.049秒但是调用function,拆成9列后时间就成了0.119秒了这还只有9层,1700多行数据,如果层次和数据太多那就完蛋了萨。
      

  5.   

    问的问题:
    你为什么非要是九个单独列数据?
    而且你的拆分是怎么做的?
    如果你选择完要的行数(像现在的2行),再进行拆分,
    数据增加后的时间只是在
    select replace(replace(aa,'\',' '),',',' ')
    from 

    SELECT 'null' || SYS_CONNECT_BY_PATH(id || '\' || name, ',') as aa 
    FROM tree 
    START WITH p_id = 'null' 
    CONNECT BY PRIOR id = p_id
    order by aa desc
    ) t
    where rownum<3; 
    会有所增长,而不会累加到你的拆分过程中呀!
    总而言之,你要取得你要的数据以后,再进行拆分!!