Unless I'm misunderstanding your question, a standard group by should work.
SQL> create table T1
2 ( acct_no number,
3 d_from date,
4 d_to date,
5 interest number );
Table created.
SQL>
SQL> insert into T1 values (1000, date '2016-01-03',date '2016-01-07', 12 );
1 row created.
SQL> insert into T1 values (1000, date '2016-01-07',date '2016-01-13', 7 );
1 row created.
SQL> insert into T1 values (1000, date '2016-01-13',date '2016-01-22', 9 );
1 row created.
SQL> insert into T1 values (1000, date '2016-01-22',date '2016-01-31', 21 );
1 row created.
SQL>
SQL> insert into T1 values (1000, date '2016-02-22',date '2016-02-25', 21 );
1 row created.
SQL> insert into T1 values (1000, date '2016-02-25',null,null );
1 row created.
SQL>
SQL> insert into T1 values (2000, date '2016-01-03',null, null );
1 row created.
SQL>
SQL> insert into T1 values (3000, date '2016-01-03',date '2016-01-07', 12 );
1 row created.
SQL> insert into T1 values (3000, date '2016-01-07',null,null );
1 row created.
SQL>
SQL> select acct_no, trunc(d_from,'MM') mth, nvl(sum(interest),0) mth_interest
2 from t1
3 group by acct_no, trunc(d_from,'MM')
4 order by 1,2;
ACCT_NO MTH MTH_INTEREST
---------- --------- ------------
1000 01-JAN-16 49
1000 01-FEB-16 21
2000 01-JAN-16 0
3000 01-JAN-16 12
SQL>