SqlServer 多行字段值字符串连接

例:   
      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

原文地址:https://www.cnblogs.com/xiaofengfeng/p/2360660.html