当前位置: 代码迷 >> Sql Server >> group by 多行转一起
  详细解决方案

group by 多行转一起

热度:8   发布时间:2016-04-24 09:21:22.0
group by 多行转一行
表   tablea


name            job                
张三              厨师
张三              会计
李四              厨师
李四              司机
张三               司机


求结果

张三            厨师,会计,司机
李四            厨师,司机




------解决思路----------------------
这个要用XML,SQL2005+有效
SELECT name
,STUFF(
(SELECT ','+job FROM TB T2 WHERE T1.name=T2.name
FOR XML PATH(''))
,1,1,'')
FROM TB T1
GROUP BY name

------解决思路----------------------

create table tablea
(name varchar(10),job varchar(10))

insert into tablea
 select '张三','厨师' union all
 select '张三','会计' union all
 select '李四','厨师' union all
 select '李四','司机' union all
 select '张三','司机'
 

create function dbo.fn_jobs
(@name varchar(10)) returns varchar(50)
as
begin
 declare @jobs varchar(50)
 
 select @jobs=isnull(@jobs+',','')+job
  from tablea
  where name=@name
  
 return @jobs
end


select name,dbo.fn_jobs(name) 'jobs'
 from tablea 
 group by name

/*
name       jobs
---------- ------------------
李四         厨师,司机
张三         厨师,会计,司机

(2 row(s) affected)
*/
  相关解决方案