2014-10-31 17 views
0

我有一個表,如:進位值

ID MONTH  VALUE 
1  06/2014 3 
1  07/2014 -2 
1  08/2014 1 
2  03/2014 1 
2  04/2014 -1 
(...) 

我要的是創造一個新的列,其分層值相加,如:

ID MONTH  VALUE BALANCE 
1  06/2014 3  3  <-- 3 + "0" (no previous) 
1  07/2014 -2  1  <-- -2 + 3 (previous balance plus current value) 
1  08/2014 1  2  <-- 1 + 1 (previous balance plus current value) 
2  03/2014 1  1  <-- (...) 
2  04/2014 -1 
(...) 

可能的方式來在這裏使用connect by子句,只是無法讓我的頭在附近。

我使用的是Oracle 11gR2的

想法?

回答

1

的分析功能sum (...) over (...)是最合適的人選:

create table tq84_t (
    id number, 
    month date, 
    value number 
); 

insert into tq84_t values (1, date '2014-06-01', 3); 
insert into tq84_t values (1, date '2014-07-01', -2); 
insert into tq84_t values (1, date '2014-08-01', -1); 

insert into tq84_t values (2, date '2014-03-01', 1); 
insert into tq84_t values (2, date '2014-04-01', -1); 


select 
    id, 
    month, 
    value, 
    sum(value) over (partition by id order by month) balance 
from 
    tq84_t;