• 合并多行的某一列值


    --合并多行的某一列值
    --
    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
  • 相关阅读:
    Sort函数的相关知识
    javascript常用排序算法总结
    机票项目辅助类
    解析机票舱位和子舱位方法
    一个哥们总结的技术知识点
    随鼠标移动的div
    【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
    C++异常及捕获_01
    Qt5_QString_测试
    Qt5_容器_知识点记录
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1638169.html
Copyright © 2020-2023  润新知