数据 表 test有2个字段
id  name
1   张三
2   李四
1   王五
要求最后显示:
id  name
1   张三,王五
2   李四
数据库环境: oracle 9/10

解决方案 »

  1.   

    select id,wm_concat(name) from tab
    group by id
      

  2.   

    我用的oracle 9 数据库wm_concat  不识别
      

  3.   

    看看精华帖,行转列.
    10g可以用用wm_concat
    select id,wm_concat(name) from table group by id;
    9i的话可以使用分析函数和SYS_CONNECT_BY_PATH
    with t1 as (select id,name,row_number()over(partition by id order by name asc) rn)
    select id,SYS_CONNECT_BY_PATH(name,',') from t1 where connect_by_isleaf=1
    connect by prior rn=rn-1;
      

  4.   

    利于 row_number()over(partition by id order by id) rn
    来构造树
    start with rn =  1---开始选where lvele = rn --只选最大的level 列用sys_connect_path(name,',')(记不清了,可能函数不是这样写的)  最后用rtim()去掉前面的,给个思路,准确函数名及用法楼主搜索下
      

  5.   

    又是这个问题
    参考:之前我写的
    http://topic.csdn.net/u/20100811/16/fb729a12-7fdc-472b-ab62-62364e630ece.html
      

  6.   

    9i的更正下
    SQL> 
    SQL>  WITH t1 AS(SELECT ID,NAME,row_number()over(PARTITION BY ID ORDER BY ROWID) rn FROM test)
      2   SELECT ID,sys_connect_by_path(NAME,',') FROM t1 WHERE connect_by_isleaf=1 START WITH rn=1 CONNECT BY PRIOR rn=rn-1 AND PRIOR ID=ID
      3  ;
     
      ID SYS_CONNECT_BY_PATH(NAME,',')
    ---- --------------------------------------------------------------------------------
       1 ,张三,王五
       2 ,李四
     
    SQL> 
      

  7.   

    我是在pl/sql查询分析器 里 执行的,  能给我oracle9 的程序代码吗?
      

  8.   

    你楼上不就是代码么
    WITH t1 AS(SELECT ID,NAME,row_number()over(PARTITION BY ID ORDER BY ROWID) rn FROM test)
    SELECT ID,sys_connect_by_path(NAME,',') FROM t1 WHERE connect_by_isleaf=1 START WITH rn=1 CONNECT BY PRIOR rn=rn-1 AND PRIOR ID=ID;