with Oracle 11 you can do a recursive query to get it.
with base_Query as (select * from test),
data (id, months, amount, iter, month_amount)
as (select id, months, amount, 0, amount/months
from base_Query
union all
select id, months, amount, iter+1, month_amount
from data
where iter+1 <= months)
select case when iter = 0 then to_number(null) else id end id,
months,
case when iter = 0 then amount else month_amount end amount
from data d
order by d.id, months;
eg
http://sqlfiddle.com/#!4/27edc/1
10g modelling variant too:
with base_query as (select rownum r, t.*, amount/months monthly_amount from test t)
select case i when 0 then to_number(null) else id end id,
months, amount
from base_query
model
partition by (r)
dimension by (0 as i)
measures (months, amount, monthly_amount, id)
rules (
id[for i from 0 to months[0] increment 1] = id[0],
amount[any] = case cv(i) when 0 then amount[0] else monthly_amount[0] end,
months[any] = months[0]
);
http://sqlfiddle.com/#!4/27edc/4
i added rownum to get a unique addresssing system, as your data had non-unique id's!