• 合并多行的某一列值


    --合并多行的某一列值
    --
    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
  • 相关阅读:
    Java单例多例的线程安全问题(转)
    Class.forName( )、class.getClassLoader().getResourceAsStream、newInstance()
    new 和Class.forName()有什么区别?(转)
    PS
    Fine BI
    Ipython
    微软推 Azure 机器学习工具:Algorithm Cheat Sheet
    MySQL基本数据类型
    Httprunner3.X+jenkins持续集成
    MSF使用之信息收集
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1638169.html
Copyright © 2020-2023  润新知