with tmp_invm as
(select 'w01' com,
2012 fiscal_year,
1 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
2 fiscal_month,
20 total_amt,
20 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
2 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
2 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
4 fiscal_month,
0 total_amt,
10 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
5 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
5 fiscal_month,
0 total_amt,
-30 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
5 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
5 fiscal_month,
0 total_amt,
0 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
6 fiscal_month,
50 total_amt,
50 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
11 fiscal_month,
90 total_amt,
40 trans_amt
from dual
union all
select 'w01' com,
2012 fiscal_year,
12 fiscal_month,
90 total_amt,
0 trans_amt
from dual),
mid_sum as
(select com, fiscal_year, fiscal_month, sum(trans_amt) trans_amt
from tmp_invm
group by com, fiscal_year, fiscal_month),
mid_dense as
(select t.com, t.fiscal_year, a.month, nvl(t.trans_amt, 0) trans_amt
from mid_sum t partition by(t.com, t.fiscal_year)
right join (select level month from dual connect by level < 13) a
on (t.fiscal_month = a.month))
select d.com,
d.fiscal_year,
d.month,
sum(d.trans_amt) over(partition by d.com, d.fiscal_year order by d.month) total_amt,
d.trans_amt
from mid_dense d