2013-04-04 45 views
0

我有一個ID和位置列的表,我試圖將多個行組合成逗號分隔列出。 對於如:Oracle 11g r2字符串彙總

Source table: ID Location  Name 
       1  USA  Bob 
       1  Brazil Bob 
       1  Russia Bob 
       2  India  Emily 
       2  China  Emily 

我的目標表應該得到這樣的

Target table: ID Location    Name 
       1  USA, Brail, Russia Bob 
       2  India, China  Emily 

我如何執行此使用Oracle 11g R2的值?

回答

1

您可以使用listagg()

select id, listagg(location, ', ') within group (order by id) as location 
from source 
group by id 

這並不能保證在表中的原始順序。 SQL表本質上是無序的,所以爲了保證這一點,你需要爲每一行分配一個不同的行ID。這可能如下親近:

select id, listagg(location, ', ') within group (order by seqnum) as location 
from (select *, rownum as seqnum from source) s 
group by id 
+0

關鍵字 – user1751356 2013-04-04 17:36:40

+0

內缺少我想這個選擇ID,wm_concat(地點),如ID地址 從sourceTable會 組,這似乎是工作。 – user1751356 2013-04-04 17:49:11

+0

但是,如果我需要從源選擇額外的列,我的解決方案無法正常工作。 – user1751356 2013-04-04 17:58:34