sql分组合并字段重复项sql for xml path

-------------------------(情景描述)

在我们处理数据时,可能会碰到这种情景:

Id                Name

1                  a,b

2                  a

1                  a,b,c

对于上面的表数据要求合并同类项Name,得到结果:

1                  a,b,c

2                  a

-------------------------(解决方案)

我们通过sql for xml path来合并Name,并写一个标量函数来去掉重复项:

1)  创建标量函数:

CREATE FUNCTION F_getStr(@oriStr nvarchar(30))

returns nvarchar(30)

as

begin

  declare @str nvarchar(30),@temp nvarchar(30)

  set @str=''

  set @temp=''

  while charindex(',', @oriStr+',')>0

  begin

    set @temp=left(@oriStr, charindex(',', @oriStr+',')-1)

    if charindex(','+@temp+',', ','+@str+',')=0

      set @str=@str+','+@temp

    set @oriStr=stuff(@oriStr, 1, charindex(',', @oriStr+','), '')   

  end

  return stuff(@str, 1, 1, '')

end

go

2)  sql语句:

select T1.id,

dbo.F_getStr(

stuff((select ';'+Name from Test as TT1 where TT1.id=T1.id for xml path('')),1,1,'')

) as EndStr from Test as T1

group by T1.id

原文地址:https://www.cnblogs.com/guozefeng/p/3656220.html