MSSQL 字段分组拼接

时间:2019-09-06
本文章向大家介绍MSSQL 字段分组拼接,主要包括MSSQL 字段分组拼接使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

方法1:缺点,不去重,不去空;见表1

with t  as(
  select 'A' parent, 'A1' child union all
  select 'A', 'A1' union all
  select 'A', '' union all
  select 'A', null union all
  select 'A', 'A2' union all
  select 'B', 'B1' union all
  select 'B', 'B2' union all
  select 'C', 'C1' union all
  select 'C', 'C2' 
)
SELECT parent, 
STUFF(
     ( 
      SELECT ','+ child FROM t a WHERE b.parent = a.parent FOR XML PATH('')
     ),1 ,1, '') children 
FROM t b 
GROUP BY parent

表1:

 方法2:通过游标来处理,去重,去空。见表2

--定义游标并进行合并处理  
declare @t table(parent varchar(100),child varchar(100))--定义结果集表变量 
declare my_cursor cursor local for  
with t1  as(
  select 'A' parent, 'A1' child union all
  select 'A', 'A1' union all
  select 'A', '' union all
  select 'A', null union all
  select 'A', 'A2' union all
  select 'B', 'B1' union all
  select 'B', 'B2' union all
  select 'C', 'C1' union all
  select 'C', 'C2' 
) 
select parent, child from t1 order by parent, child
declare @parent_old varchar(100) , @parent varchar(100) , @child varchar(100), @s varchar(100)  
open my_cursor  
fetch my_cursor into @parent , @child  
select @parent_old = @parent , @s=''  
while @@FETCH_STATUS = 0  
begin  
    if @parent = @parent_old 
    begin 
      if charindex(@child, @s)=0 and @child<>''
        select @s = @s + ',' + cast(@child as varchar)  
    end else  
      begin  
        insert @t values(@parent_old , stuff(@s,1,1,''))  
        select @s = ',' + cast(@child as varchar) , @parent_old = @parent  
      end  
    fetch my_cursor into @parent , @child  
END  
insert @t values(@parent_old , stuff(@s,1,1,''))  
close my_cursor  
deallocate my_cursor  
select * from @t

表2:

原文地址:https://www.cnblogs.com/adsoft/p/11474951.html