用自定义函数实现:
如:
create function f_union(@suppliername varchar(20))
returns varchar(100)
as
begin
  declare @sql varchar(100)
  set @sql=''
  select @sql=@sql+','+orderNo from 表 where 字段3=@suppliername
  return(stuff(@sql,1,1,''))
end
goselect 字段1=dbo.f_union(supplierName),字段2=sum(字段2),字段3
from 表 group by 字段3

解决方案 »

  1.   

    create function f_union(@suppliername varchar(20))
    returns varchar(100)
    as
    begin
      declare @sql varchar(100)
      set @sql=''
      select @sql=@sql+','+字段1 from 表 where 字段3=@suppliername
      return(stuff(@sql,1,1,''))
    end
    goselect 字段1=dbo.f_union(字段1),字段2=sum(字段2),字段3
    from 表 group by 字段3
      

  2.   

    --建测试环境
    Create table 表(字段1 varchar(10),字段2 int,字段3 varchar(10))
    insert into 表 select 'aa',11,'t'
    union all select 'bb',22,'t'
    --建函数
    Create function sumc(@字段3 varchar(10))
    returns varchar(200)
    as
    begin
        declare @return varchar(200)
        set @return=''
        select @return=@return+','+字段1 from 表 where 字段3=@字段3
        return(stuff(@return,1,1,''))
    end
    --查询
    select 
        字段1=dbo.sumc(字段3),
        字段2=sum(字段2),
        字段3 
    from 
       表
    group by 
        字段3
    --结果
    字段1  字段2  字段3
    ------  ----- -------
    aa,bb 33 t
    --删除环境
    Drop table 表
    Drop function sumc
      

  3.   

    从来没自己定义过函数,所以我想问一下,这样定义出来的函数是想sum那样通用的吗,定义的时候
    from 表 where 字段3=@suppliername 怎么解释,好像把表和条件字段固定里面了
      

  4.   

    定义出来的函数是想sum那样通用
    ----------
    创建函数成功后,对于类似的字符串格式处理,都可以采用该函数处理
    只是表名要稍微改一下!from 表 where 字段3=@suppliername
    对,固定表了,函数里面不可以象存储过程那样传递表名,然后用exec()方法执行字段呢,就不固定,看结构中处理的字段,直接传字段名过来就可以了!你主要是要理解这个思想还得看最后那个select 语句是怎么执行的
      

  5.   

    这个函数只是后面要用的语句的一部分,
    select sumc(字段1),sum(字段2),字段3 group by 字段3 这句是我随便写的, 字段3=@suppliername和我这个group by 字段3 两个字段3有关系吗,我在写的时候直接写dbo.f_union(要相加的字段名就可以了)?
      

  6.   

    字段3=@suppliername和我这个group by 字段3 两个字段3有关系吗?有关系 变量=@suppliername就是指 字段3 ,也就是传过去的分组字段名!
    我在写的时候直接写dbo.f_union(要相加的字段名就可以了)?不可以!
    我写的后面那句是写急了 写成字段1=dbo.f_union(字段1)是错的
    该是字段1=dbo.f_union(字段3) 也就是分组的那个字段
      

  7.   

    字段3=@suppliername这句怎么理解啊,字段名=一个字段名?
      

  8.   

    字段3=@suppliername这句怎么理解啊,字段名=一个字段名?
    --------->
    @suppliername 是一个变量啊!分组的变量!
      

  9.   

    字段3=@suppliername这句怎么理解啊,字段名=一个字段名?
    ---------------
    这句话就要结合后面那句select 语句来理解select 字段1=dbo.f_union(字段3),字段2=sum(字段2),字段3
    from 表 group by 字段3
    在该语句执行中,“字段1=dbo.f_union(字段3)” 是逐行扫秒记录行,
    是将当前字段3 的字段值传给函数,写的是字段名!
      

  10.   

    see了,第一次这么快问题就解决了,新年运气不错