楼主可以自己测试一把,没有环境. select id,name,age,min(decode(rn,1,color,null))time1, min(decode(rn,2,color,null))time2, min(decode(rn,3,color,null))time3, min(decode(rn,1,color,null))result1, min(decode(rn,2,color,null))result2, min(decode(rn,3,color,null))result3 from (select id,loc,num,color, row_number() over(partition by time order by time)rn from t)group by id,loc,num order by id;
select id,max(name),max(age), min(decode(rn,1,time)) time1, min(decode(rn,2,time)) time2, min(decode(rn,3,time)) time3, min(decode(rn,1,result)) result1, min(decode(rn,2,result)) result2, min(decode(rn,3,result)) result3 from (select t.*, row_number() over(partition by id order by time)rn from t) group by id order by id;
select id,name,age,min(decode(rn,1,color,null))time1,
min(decode(rn,2,color,null))time2,
min(decode(rn,3,color,null))time3,
min(decode(rn,1,color,null))result1,
min(decode(rn,2,color,null))result2,
min(decode(rn,3,color,null))result3
from (select id,loc,num,color,
row_number() over(partition by time order by time)rn
from t)group by id,loc,num order by id;
min(decode(rn,1,time)) time1,
min(decode(rn,2,time)) time2,
min(decode(rn,3,time)) time3,
min(decode(rn,1,result)) result1,
min(decode(rn,2,result)) result2,
min(decode(rn,3,result)) result3
from (select t.*,
row_number() over(partition by id order by time)rn
from t)
group by id
order by id;