直接上图了,实际就是一个路由的查询,路由id为唯一标识(如1001),但一条路由可能有好几段(2段,3段,也可能十几段,)连接构成。现能查出路由的所有段,求把这些连接起来,在一行记录中显示。用的是pl/sql 环境多行变一行行数不定

解决方案 »

  1.   

    有设想过一个思路是,拿到一个id,找出最大段数 max(num) ,如果已经存在相应的列,就进行update ,否则,先add 列,然后再update.
    但是我对 函数,过程等还非常不熟悉,求坛中各路大侠出出招啊。
      

  2.   

    使用LISTAGG,参考下面的用法:select listagg(ename,',')
    within group(order by empno desc)
    from emp;结果:
      

  3.   

    select id,WMSYS.WM_CONCAT(afac||bfac) TIME FROM T
     GROUP BY id
      

  4.   

    select wm_concat(afac || ',' || bfac) from t group by id;
      

  5.   


    竟然忘记wm_concat这个列转换的函数了
      

  6.   

    可以使用Ora10g提供的WMSYS.WM_CONCAT()函数实现行转列,得到的结果是一列。
      

  7.   

    谢谢二楼的建议,可异我的是10.2。0.4.0版本的,无奈了。cM_concat 有一个问题就是排序出错乱,这对于路由表来讲就是致命的问题,所以不能用啊。
      

  8.   

     wm_concat 聚合后排序完全错乱,路由表就变成迷宫表了。
      

  9.   

    排序的问题是可以解决的,举个例子:
    with t as
    (select 1 as id ,0 as value from dual
    union all
    select 1 as id ,2 as value from dual
    union all
    select 1 as id ,1 as value from dual
    union all
    select 1 as id ,3 as value from dual
    union all
    select 2 as id ,0 as value from dual
    union all
    select 2 as id ,2 as value from dual
    union all
    select 2 as id ,1 as value from dual
    union all
    select 2 as id ,3 as value from dual)
    select id ,max (result_list) as result
    from (select id,wm_concat(value) over (partition by id order by value) as result_list from t) group by id