zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    一维数组的 K-Means 聚类算法理解
    c#计算2个字符串的相似度
    一个人开发的html整站源码分享网站就这么上线了
    html页面显示服务器时间
    禁用浏览器自动填充表单解决办法
    布隆过滤器
    (转)二进制与三进制趣题
    随机算法_模拟退火算法
    NAT穿越
    (转)为什么所有浏览器的userAgent都带Mozilla
  • 原文地址:https://www.cnblogs.com/adsoft/p/11474951.html
Copyright © 2011-2022 走看看