sql 将多行显示为一行,如果一张表中有几行数据中的同一列的值是相同,那么只显示为一行的数据

根据这个条件,以下面的表为例,查询这张表的数据的SQL怎么写?
id name fk
1 张三 1
2 李四 1
3 王五 1
4 赵六 2
……

根据上面条件,查询出来的结果应该如下:
name fk
张三、李四、王五 1
赵六 2
……
name按相同的fk叠加,fk不固定。这SQL怎么写,麻烦大家帮忙一下。

SELECT a.fk
,
STUFF(( SELECT '、' + LTRIM(RTRIM(name
))
FROM [表] a2
-- WHERE a2.fk= a.fk
FOR
XML PATH('')
), 1, 1, '') AS b
FROM [表] a
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-17
先写一个函数。
create function get_name ( @fk int )
returns varchar(1000)
as
begin
declare @c varchar(1000)
set @c = ''
select @c = @c + name + '、' from 表 where fk = @fk
return @c
end

go

select distinct fk,dbo.get_name(fk) from 表