--pivot 行转列
with temp1 as
(select '浙江' province,'杭州' city ,'1' rank from dual union all
select '浙江' province,'宁波' city ,'2' rank from dual union all
select '浙江' province,'温州' city ,'3' rank from dual union all
select '江苏' province,'苏州' city ,'1' rank from dual union all
select '江苏' province,'无锡' city ,'2' rank from dual union all
select '江苏' province,'常州' city ,'3' rank from dual )
select * from
(select province,city ,rank from temp1)
pivot(max(city) for rank in '1' as "no.1",'2' as "no.2",'3' as "no.3");
--unpivot 列转行
with temp2 as
(select '江苏' province,'苏州' as "no.1",'无锡' as "no.2",'常州' as "no.3" from dual union all
select '浙江' province,'杭州' as "no.1",'宁波' as "no.2",'绍兴' as "no.3" from dual )
select * from
(select province,"no.1","no.2","no.3" from temp2)
unpivot(city for rank in "no.1","no.2","no.3")