oracle 列转行和行转列

--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")

发布了25 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/kimi_Christmas/article/details/90025342