Oracle列轉行函數 Listagg() 語法詳解及應用實例

Oracle 列轉行函數 Listagg()

版權聲明:本文爲CSDN博主「預見未來to50」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hpdlzu80100/article/details/53998413

  • 博客分類: 
  • Oracle SQL
  • 這是一個Oracle的列轉行函數:LISTAGG()

先看示例代碼:

Sql代碼 

with temp as(  
  select 'China' nation ,'Guangzhou' city from dual union all  
  select 'China' nation ,'Shanghai' city from dual union all  
  select 'China' nation ,'Beijing' city from dual union all  
  select 'USA' nation ,'New York' city from dual union all  
  select 'USA' nation ,'Bostom' city from dual union all  
  select 'Japan' nation ,'Tokyo' city from dual   
)  
select nation,listagg(city,',') within GROUP (order by city)  
from temp  
group by nation  

 這是最基礎的用法:

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

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

非常方便。

 

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

就是over(partition by XXX)

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

Sql代碼 

with temp as(  
  select 500 population, 'China' nation ,'Guangzhou' city from dual union all  
  select 1500 population, 'China' nation ,'Shanghai' city from dual union all  
  select 500 population, 'China' nation ,'Beijing' city from dual union all  
  select 1000 population, 'USA' nation ,'New York' city from dual union all  
  select 500 population, 'USA' nation ,'Bostom' city from dual union all  
  select 500 population, 'Japan' nation ,'Tokyo' city from dual   
)  
select population,  
       nation,  
       city,  
       listagg(city,',') within GROUP (order by city) over (partition by nation) rank  
from temp  

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章