我想实现一个表中多行合成一行怎么写的sql语句。
例如:表test
id name phone
1 张三 13888888
1 张三 8283838对以上表变成
id name phone_all
1 张三 13888888-8283838如何写一个sql语句完成!
谢谢!
例如:表test
id name phone
1 张三 13888888
1 张三 8283838对以上表变成
id name phone_all
1 张三 13888888-8283838如何写一个sql语句完成!
谢谢!
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;写了个包,里面的存储过程是为解决这个问题而写的
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的位置,这样才对
需要用sys_connect_by_path