有两张表
Table_a有a_id和a_name两列,a_id是PK
Table_b有a_id和b_name两列,没有PK,是多对多关系
现在想得到这样的结果集:
"b_name1", "a_name1,a_name2,a_name3"
"b_name2", "a_name1"
...也就是按照Table_b的b_name分组,第一列显示b_name,第二列是所有对应的a_name,以逗号分隔。一个语句能够实现吗?谢谢!
Table_a有a_id和a_name两列,a_id是PK
Table_b有a_id和b_name两列,没有PK,是多对多关系
现在想得到这样的结果集:
"b_name1", "a_name1,a_name2,a_name3"
"b_name2", "a_name1"
...也就是按照Table_b的b_name分组,第一列显示b_name,第二列是所有对应的a_name,以逗号分隔。一个语句能够实现吗?谢谢!
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/
--删除测试数据
drop function f_str
drop table 表
go
--------------------------------------------------------------------------------------------------------------
create function f_str(@b_name varchar(20))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret=''
select
@ret=@ret+','+a.a_name
from T
able_b b,Table_a a
where
b.a_id=a.a_id
and
b.b_name=@b_name
set @ret=stuff(@ret,1,1,'')
return @ret
end
goselect b_name,dbo.f_str(b_name) from Table_b group by b_name
go
http://community.csdn.net/Expert/topic/4364/4364794.xml?temp=.9475977