建一个表,表的格式至少包含月份和上面的内容,然后把数据是可以根据部门分组统计出来,放本月部分,再在这个表中根据月份累计全年。
也可以用case when一次统计出来,但是效率不高。
做是可以做出来,我暂时没考虑优化的问题。我用的是Oracle数据库,有些函数和写法可能数据库产品之间不太一样,没办法了。
首先创建一个表:
indexofVarchar2
dateof Date
feeof Number
然后插入测试数据:
insert all
into test08 values('A',to_date('2009-05-02 00:00:00','yyyy-mm-dd hh24:mi:ss'),1)
into test08 values('B',to_date('2010-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),2)
into test08 values('A',to_date('2010-02-08 00:00:00','yyyy-mm-dd hh24:mi:ss'),3)
into test08 values('B',to_date('2010-03-09 00:00:00','yyyy-mm-dd hh24:mi:ss'),4)
into test08 values('A',to_date('2009-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),5)
into test08 values('A',to_date('2012-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),38)
select * from dual
然后这个表就和你那个差不多了
A 2009-05-02 00:00:00 1
B 2010-01-01 00:00:00 2
A 2010-02-08 00:00:00 3
B 2010-03-09 00:00:00 4
A 2009-03-01 00:00:00 5
A 2012-03-01 00:00:00 38
稍微多了几个主要是测试用。
然后查询你需要的:
select t1.indexof as indexof,t1.dateof as 日期,t1.feeof as 当期费用,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.dateof>=trunc(t1.dateof,'yyyy')
and t2.indexof=t1.indexof
) as 本年度累加,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.indexof=t1.indexof
) as 总累加
from test08 t1
order by dateof
注意:trunc函数是Oracle数据库函数,是取当前日期的年份的。
order by dateof如果不需要可以删除。有什么不明白的地方可以直接M我。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)