我想实现一个表中多行合成一行怎么写的sql语句。
例如:表test
id  name    phone 
1   张三   13888888
1   张三   8283838对以上表变成
id  name   phone_all
1   张三   13888888-8283838如何写一个sql语句完成!
谢谢!

解决方案 »

  1.   

    select a.id,a.name,a.phone||'-'||b.phone from test a,test b where a.id=b.id and a.name=b.name;
      

  2.   

    create or replace package body expme is    procedure unionphone
        is
        rectemp user2%rowtype;
        vid     user2.id%type;
        vphone  varchar(100);
        vname   user2.name%type;
        cursor  ucursor is
          select id,name,phone 
          from user2
          order by id,name;
        begin
          open ucursor;
          fetch ucursor into rectemp;
          if(ucursor%found) then
              vid:=rectemp.id;
              vname:=rectemp.name;
              vphone:=rectemp.phone;
          end if ;
          loop
              fetch ucursor into rectemp;
              
              if(vid=rectemp.id) then
                 vphone:=vphone||rectemp.phone;
              else
                 insert into zzz values(vid,vname,vphone);
                 vid:=rectemp.id;
                 vname:=rectemp.name;
                 vphone:=rectemp.phone;
              end if;
              exit when ucursor%notfound;       
           end loop;
           insert into zzz values(vid,vname,vphone);
            commit; 
           close ucursor;
        end unionphone;
    end expme;写了个包,里面的存储过程是为解决这个问题而写的
      

  3.   

    create or replace package body expme is    procedure unionphone
        is
        rectemp user2%rowtype;
        vid     user2.id%type;
        vphone  varchar(100);
        vname   user2.name%type;
        cursor  ucursor is
          select id,name,phone 
          from user2
          order by id,name;
        begin
          open ucursor;
          fetch ucursor into rectemp;
          if(ucursor%found) then
              vid:=rectemp.id;
              vname:=rectemp.name;
              vphone:=rectemp.phone;
          end if ;
          loop
              fetch ucursor into rectemp;
              exit when ucursor%notfound;
              if(vid=rectemp.id) then
                 vphone:=vphone||rectemp.phone;
              else
                 insert into zzz values(vid,vname,vphone);
                 vid:=rectemp.id;
                 vname:=rectemp.name;
                 vphone:=rectemp.phone;
              end if;
           end loop;
           insert into zzz values(vid,vname,vphone);
            commit; 
           close ucursor;
        end unionphone;
    end expme;修改个exit loop的位置,这样才对
      

  4.   

    oracle版本?
    需要用sys_connect_by_path