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
  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1638169.html
Copyright © 2011-2022 走看看