oracle 数据库标题问题 这个格式咋弄,就是上面的本月和全年累计,用sql实现

oracle 数据库标题问题 这个格式咋弄,就是上面的本月和全年累计,用sql实现,第1张

这种格式不是sql能实现的,是报表设计器设计出来的。

建一个表,表的格式至少包含月份和上面的内容,然后把数据是可以根据部门分组统计出来,放本月部分,再在这个表中根据月份累计全年。

也可以用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我。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9551157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存