码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server将相同id的另一列的多行内容拼接成一行

时间:2014-08-28 17:46:25      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   ar   for   数据   

比如表中有两列数据 :

id name

1 a

1 b

1 c

2 d

2 e


变成如下格式:

id name

1 a,b,c

2 d,e

数据:

if object_id(#表)is not null drop table #表
select did,name, from #表 order by did
drop table #表
select 66 nid,aaa name,1 did into #表 union all
select 67,bbb,1 union all
select 80,ccc,1 union all
select 69,ddd,2 union all
select 70,eee,2

 

实现代码如下:

--递归计算多行合并成一个字段
--方法1
;with x (did, cnt, list, nid, le)
as (
select did,count(1)over(partition by did),cast(name as varchar(100))
,nid,1 from #表
union all
select x.did,x.cnt,cast(x.list+,+a.name as varchar(100)),a.nid,x.le+1 from #表 a,x
where a.did=x.did and a.nid>x.nid
)
select * from  x
where le=cnt


--方法2 中间表效率不好
if object_id(#表)is not null drop table #结果

select did,cast(name as varchar(2000)) name 
into #结果
from #表 
order by did

declare @dept int =‘‘,@name varchar(max) =‘‘
update a
set @name= case when @dept=did then @name+,+name
            else name
            end,
    @dept=did,
    name=@name
from #结果 a
select did,max(name) from #结果
group by did


--方法3 使用xml方便,简单
--select ‘,‘ + name from #表   for xml path(‘‘)
select did, name = (stuff((select , + name from #表 where did =   
a.did for xml path(‘‘)),1,1,‘‘)) from #表 a group by did  

结果:

bubuko.com,布布扣

 

SQL Server将相同id的另一列的多行内容拼接成一行

标签:style   blog   http   color   使用   io   ar   for   数据   

原文地址:http://www.cnblogs.com/syhsl/p/3941925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!