需求:

有表tb,表有两个字段,分别为:id,value。

表中存有数据如下:id        value

                         1         a

                         1         a1

                         1         a2

                         2         b

                         2         b1

                         3         c1

                         3         c2

     需要通过查询实现:1         a,a1,a2

                              2         b,b1

                              3         c1,c2

实现方法:

          1、sql2000 使用合并函数:

create function f_tb(@id int)
returns varchar(8000)
as
begin
  declare @str varchar(8000)
  set @str = ''
  select @str = @str + ',' + cast(value as varchar) from tb where id = @id
  set @str = right(@str , len(@str) - 1)
  return(@str)
End
go

--调用自定义函数得到结果:
select distinct id ,dbo.f_tb(id) as value from t

          2、sql2005 处理方式如下:

SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
        SELECT [values]= STUFF(REPLACE(REPLACE(
            (
                SELECT value FROM tb N
                WHERE id = A.id
                FOR XML AUTO
            ), '<N value="', ','), '"/>', ''), 1, 1, '')
)N