with test as (
select '1' code, 'Get code 1' name, 1 mpd, 600 amt,'AA' pd from dual
union all select '2' code, 'drop code 2' name, 0 mpd, -600 amt,'AA' pd from dual
union all select '3' code, 'Gte code 3' name, 1 mpd, 100 amt,'BB' pd from dual
)
select pd,sum(amt) as total,
min(code) keep (dense_rank last order by mpd) as code,
min(name) keep (dense_rank last order by mpd) as name
from test group by pd