日期:2014-05-17  浏览次数:20530 次

关于按月合计以及累计的SQL该如何实现?
业务员 年 月 客户         发货 运费 质保金
张三 2009 1 香港某某公司 1
张三 2009 1 上海某某公司 1
张三 2009 1 厦门某某公司 1
张三 2009 1 当月合计    3
张三 2009 1 累    计          3
张三 2009 2 厦门某某公司 2
张三 2009 2 上海某某公司 2
张三 2009 2 珠海某某公司 2
张三 2009 2 当月合计   6
张三 2009 2 累    计   9
==============================================================================
明细表汇总出上面的效果:
按月合计这个好办,但是累计似乎比较难。希望有做过类似应用的兄弟不吝赐教
------最佳解决方案--------------------
if object_id('[tb]') is not null drop table [tb] 
 go 
create table [tb]([业务员] varchar(10),[年] int,[月] int,[客户] varchar(20),[发货] int)
insert [tb] select '张三',2009,1,'香港某某公司',1
union all select '张三',2009,1,'上海某某公司',1
union all select '张三',2009,1,'厦门某某公司',1
--union all select '张三',2009,1,'当月合计',3
--union all select '张三',2009,1,'累计',3
union all select '张三',2009,2,'厦门某某公司',2
union all select '张三',2009,2,'上海某某公司',2
union all select '张三',2009,2,'珠海某某公司',2
--union all select '张三',2009,2,'当月合计',6
--union all select '张三',2009,2,'累计',9
go
select *
from 
(
select * from tb
union all
select 业务员,年,月,'当月合计',sum(发货) from tb group by 业务员,年,月
union all 
select 业务员,年,月,'累计',(select sum(发货) from (select 业务员,年,月,sum(发货) 发货 from tb group by 业务员,年,月) a where a.业务员=t.业务员 and a.年=t.年 and a.月<=t.月) from (select 业务员,年,月,sum(发货) 发货 from tb group by 业务员,年,月) t group by 业务员,年,月
) tb
order by 年,月,case 客户 when '累计' then 3 when '当月合计' then 2 else 1 end

/*
业务员        年           月           客户                   发货
---------- ----------- ----------- -------------------- -----------
张三         2009        1           香港某某公司               1
张三         2009        1           上海某某公司               1
张三         2009        1           厦门某某公司               1
张三         2009        1           当月合计                 3
张三         2009      &n