一表有如下数据
id       name
1        aaa
2        bbb
3        aaa
4        ccc
5        aaa
6        bbb将name重复的id合并起来,结果如下:
id       name
1+3+5    aaa
2+6      bbb
4        ccc
如果id重复一次很好实现,但现在id重复次数未知。
只使用查询语句,不用游标和循环,能实现吗?(不好意思,只够给10分~-~)

解决方案 »

  1.   


    create function f(@id varchar(100))
    returns varchar(8000)
    begin 
    declare @str varchar(8000)
    set @str=''
    select @str=@str+'+'+cast(id as varchar) from 表 where [name]=@id
    set @str=stuff(@str,1,1,'')
    return @str
    endselect dbo.f([name]),[name] from 表 group by [name]
      

  2.   

    這樣?Select SUM(id) As id, name From 表 Group By name
      

  3.   


    create function dbo.uf_getstr(@name varchar(10))
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+'+'+rtrim(id) from 表1 where name=@name
    set @str=stuff(@str,1,1,'')
    return @str
    end
    go
    select distinct dbo.uf_getstr(name) as id,name from 表
      

  4.   

    create table tab(id int,name varchar(10))
    insert tab
    select 1,'aaa'
    union select 2,'bbb'
    union select 3,'aaa'
    union select 4,'ccc'
    union select 5,'aaa'
    union select 6,'bbb'gocreate function f(@id varchar(100))
    returns varchar(8000)
    begin 
    declare @str varchar(8000)
    set @str=''
    select @str=@str+'+'+cast(id as varchar) from tab where [name]=@id
    set @str=stuff(@str,1,1,'')
    return @str
    end
    go
    select dbo.f([name]),[name] from tab group by [name]go 
    drop function f
    drop table tab
      

  5.   

    ---创建测试数据
    if object_id('你的表') is not null
       drop table 你的表
    go
    create table 你的表(id int,name varchar(10))
      insert 你的表 select 1,'aaa'
         union all select 2,'bbb'
         union all select 3,'aaa'
         union all select 4,'ccc'
         union all select 5,'aaa'
         union all select 6,'bbb'
    ---查看测试数据
    select * from 你的表
    ---创建函数
    create function dbo.fn_mergeid(@name varchar(10))
        returns varchar(8000)
    as 
      begin
        declare @sql varchar(1000)
        set @sql=''
        select @sql=@sql+'+'+cast([id] as varchar) from 你的表 where name=@name
        return stuff(@sql,1,1,'')
      end
    go
    ---查看结果
    select dbo.fn_mergeid(name) as id,name from 你的表 group by name   /*
    id     name       
    ------ ---------- 
    1+3+5  aaa
    2+6    bbb
    4      ccc(所影响的行数为 3 行)
    */