数据表结构如下:
  日期          编码       类别         数量
2005-02-07     001       方正电脑       120
2005-02-18     001       方正电脑       58
2005-02-08     002       联想电脑       100
2005-02-09     002       方正电脑       120要求结果如下:
日期         编码         类别        数量
07、18       001        方正电脑     178
09           002        方正电脑     120
08           002        联想电脑     100如果日期不用的话,SQL语句很简单
select 编码,类别,sum(数量) from 表 group by 编码,类别
但是现在要求把日期合并,这样的SQL语句该如何写啊

解决方案 »

  1.   

    create function f_union(
    @id varchar(10),
    @lei varchar(10)
    )
    returns varchar(100)
    as
    begin
      declare @sql varchar(100)
      set @sql=''
      select @sql=@sql+'、'+right(日期,2) from tb where 编码=@id and 类别=@lei 
      return(stuff(@sql,1,1,''))
    end
    goselect 日期=dbo.f_union(编码,类别),编码,类,sum(数量) from tb group by 编码,类别
      

  2.   

    查询语句写少了点:
    select 日期=dbo.f_union(编码,类别),
            编码,
            类别,
            数量=sum(数量) 
    from tb group by 编码,类别
      

  3.   

    --处理,建一个函数即可:
    --例子:
    --环境
    Create table 表(日期 datetime,编码 varchar(10),类别 varchar(10),数量 int)
    insert into 表 select '2005-02-07','001','方正电脑',120
    union all select  '2005-02-18','001','方正电脑',58
    union all select  '2005-02-08','002','联想电脑',100
    union all select  '2005-02-09','002','方正电脑',120
    --函数
    Create function F_UnionStr(@编码 varchar(10),@类别 varchar(10))
    returns varchar(20)
    as
    begin
    declare @return as varchar(20)
    set @return=''
    select @return=@return+'、'+cast(day(日期)as varchar) from 表 where 编码=@编码 and 类别=@类别
    return (stuff(@return,1,1,''))
    end
    --查询
    select 日期=dbo.F_UnionStr(编码,类别),
           编码=编码,
           类别=类别,
           数量=sum(数量)
    from 表 
    group by 编码,类别
    --结果
    日期                   编码         类别         数量          
    -------------------- ---------- ---------- ----------- 
    7、18                 001        方正电脑       178
    9                    002        方正电脑       120
    8                    002        联想电脑       100(所影响的行数为 3 行)
      

  4.   

    --删除环境: (表和函数)
    Drop table 表
    Drop funtion F_UnionStr
      

  5.   

    create table tb_test(dt datetime,bm char(3),type varchar(20),qty int)
    insert into tb_test
    select '2005-02-07','001','方正电脑',120 union
    select '2005-02-08','001','方正电脑',58 union
    select '2005-02-08','002','联想电脑',100 union
    select '2005-02-09','002','方正电脑',120 --辅助函数
    create function fns_getstr(@bm char(3),@type varchar(20))
    returns varchar(200)
    as
    begin
    declare @restr varchar(200)
    select @restr=''
    select @restr=@restr+','+right(convert(char(10),dt,120),2)
    from tb_test
    where bm=@bm and type=@type
    select @restr=stuff(@restr,1,1,'')
    return @restr
    end
    --处理语句
    select dbo.fns_getstr(bm,type),bm,type,sum(qty) 
    from tb_test
    group by bm,type--删除测试
    drop table tb_test
    drop function fns_getstr/*结果
    07,08 001 方正电脑 178
    09 002 方正电脑 120
    08 002 联想电脑 100*/