oracle 行轉列 列轉行


 

行轉列

 

這是一個Oracle的列轉行函數:LISTAGG()

 

先看示例代碼:

Sql代碼   收藏代碼
  1. with temp as(  
  2.   select 'China' nation ,'Guangzhou' city from dual union all  
  3.   select 'China' nation ,'Shanghai' city from dual union all  
  4.   select 'China' nation ,'Beijing' city from dual union all  
  5.   select 'USA' nation ,'New York' city from dual union all  
  6.   select 'USA' nation ,'Bostom' city from dual union all  
  7.   select 'Japan' nation ,'Tokyo' city from dual   
  8. )  
  9. select nation,listagg(city,',') within GROUP (order by city)  
  10. from temp  
  11. group by nation  

 這是最基礎的用法:

LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)

 

用法就像聚合函數一樣,通過Group by語句,把每個Group的一個字段,拼接起來。

非常方便。

 

同樣是聚合函數,還有一個高級用法:

就是over(partition by XXX)

也就是說,在你不實用Group by語句時候,也可以使用LISTAGG函數:

Sql代碼   收藏代碼
  1. with temp as(  
  2.   select 500 population, 'China' nation ,'Guangzhou' city from dual union all  
  3.   select 1500 population, 'China' nation ,'Shanghai' city from dual union all  
  4.   select 500 population, 'China' nation ,'Beijing' city from dual union all  
  5.   select 1000 population, 'USA' nation ,'New York' city from dual union all  
  6.   select 500 population, 'USA' nation ,'Bostom' city from dual union all  
  7.   select 500 population, 'Japan' nation ,'Tokyo' city from dual   
  8. )  
  9. select population,  
  10.        nation,  
  11.        city,  
  12.        listagg(city,',') within GROUP (order by city) over (partition by nation) rank  
  13. from temp  

 

總結:LISTAGG()把它當作SUM()函數來使用就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM