Если вы имеете дело с предопределенным списком типов, вы можете использовать условное агрегирование для разворота:
select
dt_range,
max(case when type = 12 then type end) type12,
max(case when type = 19 then type end) type19,
max(case when type = 15 then type end) type15,
max(case when type = 12 then amt end) type12_amt,
max(case when type = 19 then amt end) type19_amt,
max(case when type = 15 then amt end) type15_amt
max(case when type = 12 then prct end) type12_prct,
max(case when type = 19 then prct end) type19_prct,
max(case when type = 15 then prct end) type15_prct
from mytable
group by dt_range