create table t
(id varchar(3),id1 varchar(2),id2 varchar(2))insert t
select '001','a','b' union all
select '001','c','d' union all
select '002','e','f' union all
select '003','g','h'
gocreate function f_union(@id varchar(3))
returns varchar(30)
as
begin
   declare @sql varchar(30)
   set @sql=''
   select @sql=@sql+','+id1+' '+id2 from t where id=@id
   return(stuff(@sql,1,1,''))
end
goselect id,dbo.f_union(id) as field from t group by id drop function f_union
drop table tid   field                          
---- ------------------------------ 
001  a b,c d
002  e f
003  g h(所影响的行数为 3 行)

解决方案 »

  1.   

    --创建测试表
    create table tb1([id]varchar(10),id1 varchar,id2 varchar)
    insert into tb1
    select '001','a','b'union all
    select '001','c','d'union all
    select '002','e','f'union all
    select '003','g','h'
    go--写个函数将所有相同ID的id1和id2变成一个字符串
    create function funcIDToString(
    @ID varchar(10)
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+cast(id1+' '+id2 as varchar) 
    from tb1
    where [ID]=@ID
    return(stuff(@r,1,1,''))
    end
    go--调用实现查询
    select distinct [id],Field=dbo.funcIDToString([id])from tb1--删除自定义函数和演示表
    drop table tb1
    drop function dbo.funcIDToString
    /*
    id         Field                                                                                                                                                                                                                                                            
    ------ -------------
    001        a b,c d
    002        e f
    003        g h(所影响的行数为 3 行)
    */