日期:2014-05-16 浏览次数:20563 次
情况一:
表结构中没有累计的字段,我们需要展示一下累计的值,这种情况实现起来比较简单,只是简单的查询就可以了,
下面我会详细的介绍:
建表语句:
create table TEST1
(
  MON??  CHAR(6),
  VAL??  NUMBER(4)  
)
其中:mon为月份模式为:20060102,val为该月的数值。
我们只是需要展示一下累计的值(从该年1月至该月的累计值),这样的执行语句为:
SELECT 
SUM(VAL) 
OVER (PARTITION BY SUBSTR(MON,1,4)
ORDER BY MON) 
FROM TEST1
ORDER BY MON,VAL
EG:
原表数据:
  mon??  val
200501  1
200502  3
200503  5
经过查询后的结构为:
mon??  val  sum
200501  1??  1
200502  3??  4
200503  5??  9
?
情况二:
表结构中存在累计的字段,我们需要把累计值计算之后,放在累计字段之中,这样的实现就比较麻烦了,但是会者不难,难者不会。
下面将详细介绍做法:
create table TEST1
(
  MON??  CHAR(6),
  VAL??  NUMBER(4),
  total number(6)
)
其中:mon为月份模式为:20060102,val为该月的数值,total 从该年1月至该月的累计值。
首先:将表中插入各月的数据:
 mon??  val  total
200501  1???  0
200502  3???  0
200503  5???  0
然后,我们用下面的语句进行相应的更新操作:
update test1 set 
total= (select p.val_sum from 
(select mon,sum(val)  over (partition by substr(mon,1,4) order by mon) val_sum 
from test1 order by mon) p 
where test1.mon=p.mon)
这样表test1中的数据会变成:
mon??  val  total
200501  1??  1
200502  3??  4
200503  5??  9