тройной pivot!,
что-то типа?
with t as
(select 1 id ,to_date('01.01.2010','dd.mm.yy') sd, 300 val, 400 val_1 from dual union all
select 1 id ,to_date('01.02.2010','dd.mm.yy'), 300 , 400 from dual -- union all
)
select * from (select id,to_char(sd,'mm') sd,sum(val) as sum_val,sum(val_1) as sum_val_1,sum(val_1+val+val_1) as sum_all from t group by id,to_char(sd,'mm'))
pivot (
sum(sum_val) as sum_val
,sum(sum_val_1) as sum_val_1
,sum(sum_all) as sum_all
for sd in ('01','02')
);