例: 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 是負數,則返回Null 字元串。如果 start 比第一個 character_expression 長,則返回Null 字元串。 length 是一個整數,指定要刪除的字元數。如果 length 比第一個 character_expression 長,則最多刪除到最後一個 character_expression 中的最後一個字元。傳回型別如果 character_expression 是一個支援的字元資料類型,則返回字元資料。如果 character_expression 是一個支援的 binary 資料類型,則返回位元據。 注釋可以嵌套字串函數。 樣本下例 通過在第一個字串 (abcdef) 中刪除從第二個位置(字元 b)開始的三個字元,然後在刪除的起始位置插入第二個字串,建立並返回一個字串。 SELECT STUFF('abcdef', 2, 3, 'ijklmn') GO下面是結果集:--------- aijklmnef |