例: id txt 1 aaa 1 bbb 2 ccc 3 ddd 3 eee 3 fff select id,***(txt,';') from tb group by id 结果: 1 aaa;bbb 2 ccc 3 ddd;eee;fff方法---------------------------------------------------------------- create table tb(id int,txt varchar(100)) go insert into tb select 1,'aaa' union all select 1,'bbb' union all select 2,'ccc' union all select 3,'ddd' union all select 3,'eee' union all select 3,'fff' go --写一个聚合函数: create function dbo.fn_Merge(@id int) returns varchar(8000) as begin declare @r varchar(8000) set @r='' select @r=@r+';'+txt from tb where id=@id return stuff(@r,1,1,'') end go -- 调用函数 select id, dbo.fn_Merge(id) as txt from tb group by id go drop table tb drop function fn_Merge
------------STUFF函数-------------- STUFF删除指定长度的字符并在指定的起始点插入另一组字符。 语法 STUFF ( character_expression , start , length , character_expression ) 参数 character_expression由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。 start 是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。 length 是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。返回类型如果 character_expression 是一个支持的字符数据类型,则返回字符数据。如果 character_expression 是一个支持的 binary 数据类型,则返回二进制数据。 注释可以嵌套字符串函数。 示例下例 通过在第一个字符串 (abcdef) 中删除从第二个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,创建并返回一个字符串。 SELECT STUFF('abcdef', 2, 3, 'ijklmn') GO下面是结果集:--------- aijklmnef |