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:

  • 相关阅读:
    抽象类与抽象方法
    简单工厂模式
    面向对象的七种基本设计原则
    HashTable集合遍历的三种方法
    继承(父类为虚方法以及子类的重写)
    继承(is与as)
    Chrome OS 更新新版本可让Linux访问USB连接的Android设备
    谷歌对Intel 10nm进度不满
    盖茨对没能做好手机系统对抗苹果表示遗憾
    微软内部封杀 Slack
  • 原文地址:https://www.cnblogs.com/adsoft/p/11474951.html
Copyright © 2011-2022 走看看