数据表结构如下:
日期 编码 类别 数量
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语句该如何写啊
日期 编码 类别 数量
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语句该如何写啊
@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 编码,类别
select 日期=dbo.f_union(编码,类别),
编码,
类别,
数量=sum(数量)
from tb group by 编码,类别
--例子:
--环境
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 行)
Drop table 表
Drop funtion F_UnionStr
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*/