--邹老大的例子有表tb, 如下:
id    value
----- ------
1     aa
1     bb
2     aaa
2     bbb
2     ccc需要得到结果:
id     values
------ -----------
1      aa,bb
2      aaa,bbb,ccc即, group by id, 求 value 的和(字符串相加)这个问题的一般处理方法是, 写一个聚合函数:
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
   declare @r varchar(8000)
   set @r=''
   select @r=@r+','+value from tb where id=@id
   return stuff(@r,1,1,'')
end
go-- 调用函数
select id, values=dbo.f_str(id) from tb group by id

解决方案 »

  1.   

    照这个改即可:--生成测试数据
    create table 表(部门 int,人员 varchar(20))
    insert into 表 select 1,'张三'
    insert into 表 select 1,'李四'
    insert into 表 select 1,'王五'
    insert into 表 select 2,'赵六'
    insert into 表 select 2,'邓七'
    insert into 表 select 2,'刘八'
    go--创建用户定义函数
    create function f_str(@department int)
    returns varchar(8000)
    as
    begin
        declare @ret varchar(8000)
        set @ret = ''
        select @ret = @ret+','+人员 from 表 where 部门 = @department
        set @ret = stuff(@ret,1,1,'')
        return @ret 
    end
    go
    --执行
    select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
    go--输出结果
    /*
    部门  人员
    ----  --------------
    1     张三,李四,王五
    2     赵六,邓七,刘八
    */
    --删除测试数据
    drop function f_str
    drop table 表
    go
      

  2.   

    --创建用户定义函数
    create function f_str(@Sc_num int,@Pack_num int)
    returns varchar(8000)
    as
    begin
        declare @ret varchar(8000)
        set @ret = ''
        select @ret = @ret+'_'+Quota from 表 where Sc_num=@Sc_num and Pack_num=@Pack_num
        set @ret = stuff(@ret,1,1,'')
        return @ret 
    end
    go
    --执行
    select Sc_num,Pack_num,dbo.f_str(Sc_num,Pack_num) as Quota from 表 group by Sc_num,Pack_num
    go
      

  3.   

    if object_id('tb_test') is not null  drop table tb_testcreate table tb_test(Sc_num int ,pack_num int,Quota VARchar(20)) 
    insert into tb_test Select  1 , 1 , 'AB'
    union all Select  1 , 2 , 'COU'
    union all Select  1 , 3 , 'HE1'
    union all Select  1 , 2 , 'KL'
    union all Select  1 , 3 , 'CU'
    gocreate function f_test( @Sc_num int,@pack_num int )
    returns varchar(8000)
    as
    begin
       declare @return varchar(8000)
       set @return = ''
       Select @return = @return + '_'+ Quota from tb_test where Sc_num = @Sc_num and pack_num = @pack_num
       set @return = stuff(@return,1,1,'')
       return @return
    end
    go select Sc_num,pack_num,dbo.f_test(Sc_num,pack_num) from tb_test group by Sc_num,pack_num
    drop table tb_test
    drop function f_test