zoukankan      html  css  js  c++  java
  • 合并多行的某一列值

    --合并多行的某一列值
    --
    stuff:删除指定的字符,并在指定的起点处插入另一组字符。
    create table tb
    (id
    int,col1 varchar(10))
    go

    insert tb select 1 , '曾祥展'  
    insert tb select 1 , '学无止境' 
    insert tb select 1 , 'ok'
    insert tb select 2 , 'B'

    drop table tb

    --函数
    create function StrLink(@id int)
    returns varchar(8000)
    as
    begin 
    declare @sql varchar(8000)     
    set @sql='' 
    select @sql=@sql+','+col1 from tb where id=@id 
    set @sql=stuff(@sql,1,1,''
    return @sql
    end

    drop function StrLink


    select * from tb
    select col=dbo.StrLink(1)

    /*

    id   col1
    -----------
    1    曾祥展
    1    学无止境
    1    ok
    2    B


         col
    ------------------
    曾祥展,学无止境,ok

    */

     declare @Temp TABLE([Col1] varchar(50), [Col2] varchar(100)) 

    Insert @Temp  
    Select 'a''asd' union 
    Select 'a''rdf' union 
    Select 'a''dmg' union 
    Select 'b''kk' union 
    Select 'b''useh' 
    --第一种方法
    select a.[Col1],stuff((select','+b.[Col2] from @Temp as b where a.[Col1] = b.[Col1] for xml path('')),1,1,''as res 
    from @Temp a 
    group by a.[Col1] 

    --或者
    SELECT DISTINCT
    [Col1],
    [Col2] = SUBSTRING(( SELECT '' + [Col2] as [text()]
    FROM @Temp t2
    WHERE t2.Col1 = t1.Col1
    FOR XML path(''), elements
    ), 2100
    )
    FROM @Temp t1


    --结果:
              a asd,dmg,rdf
              b kk,useh

     

     

    广西壮族自治区,玉林市,玉州区

    create index ix_id on 中国(id)
    create index ix_pid on 中国(pid)
    
        
       -- update dbo.中国 set allname= dbo.GetAllName(id)  
       -- select   dbo.GetAllName(450902)
       
    create function GetAllName (@id int)
    returns varchar(8000)
    as 
        begin  
            declare @sql varchar(8000)      
            set @sql='';
                with    T(flag, id, pid, [name])
                          as (select    @id as flag, id, pid, [name]
                              from      中国 a
                              where     1=1 and a.id=@id
                              union all
                              select    @id as flag, b.id, b.pid, b.[name]
                              from      中国 b
                              inner join T c on c.pid=b.id)
                     --  SELECT   *       FROM     T   WHERE pid !=0      
    select  @sql=@sql+','+[name]
    from    T
    where   id!=1
    order by id 
            set @sql=stuff(@sql, 1, 1, '')  
            return @sql
    
        end
  • 相关阅读:
    基础算法(C#)
    Mac系统Docker安装Redis
    Mac系统Docker安装jenkins
    设计模式-缓存驻留模式
    设计模式列表
    vs问题---...inDebugJns.Gaea.dll”标记为系统必备组件,必须对其进行强签名。
    vs问题--------------标记为系统必备组建
    Excel--------Excel实现数据对比
    IIS--------问题解决(.net开发中localhost可以访问,本地ip不可以)
    .NET--------枚举扩展方法(枚举转list,获取枚举描述)
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1638169.html
Copyright © 2011-2022 走看看