各位大侠
我有这样的想法,不知道用sql语句如何在oracle实现
表的结构已经是定义好的,不能修改了。举例如下
Tbl(....,itemno,name,....)
---------------------------------------
    ...  A11111,Name11 ...
    ...  A11111,Name12 ...
    ...  A11111,Name13 ...
    ...  A22222,Name21 ...
    ...  A22222,Name22 ...itemno和name 都不是主健,而且itemno是用来外连接的,所以,我想得到唯一一行itemno数据,同时也不想丢失name数据。
我想得到的结果就是 把name 信息都存放在一起显示。
"A11111","Name11 Name12 Name13"
"A22222","Name21 Name22"
可是不知道如何能够用sql语句实现。急需帮助!!!!

解决方案 »

  1.   

    10G的版本
    select itemno, WMSYS.WM_CONCAT(name)  name 
    from tbl 
    group by itemno
      

  2.   

    不过这样出来是有,的
    你可以这样
    select itemno, replace(WMSYS.WM_CONCAT(name),',',' ')  name  
    from tbl  
    group by itemno
      

  3.   

    select substr(max(sys_connect_by_path(name,' ')),2) id,name 
     from (select a.*,row_number()over(partition itemno name order by name) rn from a ) 
      group by itemno
      start with rn=1 
     connect by rn-1=prior rn and itemno=prior itemno 
    10G以下可以用这方法,
    不过可能语句有点小错误,需要调试下
      

  4.   

    10G 有如此好的方法阿??
    MY god.
    可惜我用的不是10G.
      

  5.   

    10G 以下,就用start with connect by配合sys_connect_by_path来生成
    不过这两个方法我都是抄来的
      

  6.   

    能解释一下10G以下的那个吗?
    我看得有点乱
    select substr(max(sys_connect_by_path(name,' ')),2) id,name  
     from (select a.*,row_number()over(partition itemno name order by name) rn from a )  
      group by itemno 
      start with rn=1  
     connect by rn-1=prior rn and itemno=prior itemno  a: table name
    name: tbl 中的name 字段??我依据这样的格式,提示sys_connect_by_path 参数不对。
      

  7.   

    select substr(max(sys_connect_by_path(name,' ')),2) id,itemno    
     from (select a.*,row_number()over(partition itemno name order by name) rn from a )   
      group by itemno  
      start with rn=1   
     connect by rn-1=prior rn and itemno=prior itemno   
    上面有点错误,红字部分改一下
    第一层SQL,通过row_number来生成树结构
    第二层来遍历树,用sys_connect_by_path生成树路径
    再取最长的路径名,把最前的空格滤掉
    sys_connect_by_path(name,' ')表示用空格来连接各路径,最前面也会加上的,所以最后输出要滤掉最前面的
    之所以用substr,而不用trim滤空格,是为了通用性
    因为这里是用空格来连接各路径有,有些会用,或者>
    比如用>
    sys_connect_by_path(name,'> ')
    出来就是
    >Name11>Name12>Name13