with t as(
select 1 a, '上' b, 1 c from dual
union
select 2 a, '中' b, 5 c from dual
union
select 3 a, '下' b, 3 c from dual
union
select 2 a, '左' b, 4 c from dual
)
select max(decode(a,1,b,null)) "1",
max( decode(a,2,b,null)) "2",
max(decode(a,3,b,null)) "3"
from(
select row_number() over(partition by a order by c) rm
,t.*
from t
)
group by rm