求一sql语句(已经解决) ( 积分: 50 )

  • 主题发起人 主题发起人 l_x_dong
  • 开始时间 开始时间
L

l_x_dong

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表内容如下:
id text
1 test1
1 test11
2 test2
2 test22
2 test222
要求结果为
1 test1,test11
2 test2,test22,test222
请高手赐教。
 
行列转换--合并

有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1

创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A
 
只用一条sql语句不用过程
 
select max(sys_connect_by_path(text,',')) result
from (select id,text,(row_number() over(order by id,text desc)
dense_rank() over(order by id)) rn,
max(text) over(partition by id) qs
from A )
start with text = qs
connect by rn-1 = prior rn
group by id

这是我查过资料后找到的,一起分享
 
感谢楼主分享,但是用SQL SERVER测试不行,只能用ORACLE吧!还是有局限性,郁闷...
谢谢了...
 
后退
顶部