2014-08-29 39 views
1

表t1:的Oracle SQL '選擇' 與具有組合值1個欄

pk_id | col1 | col2 | col3 
=========================== 
1  | val1 | val2 | val3 

表T2:(fk_id被外鍵引用到pk_id)

fk_id | col4 
============= 
1  | val4A 
1  | val4B 
1  | val4C 

我的SQL查詢是:

select pk_id,col1,col2,col3,col4 
from t1 left join t2 on t1.pk_id=t2.fk_id; 

結果是:

pk_id | col1 | col2 | col3 | col4 
=================================== 
1  | val1 | val2 | val3 | val4A 
1  | val1 | val2 | val3 | val4B 
1  | val1 | val2 | val3 | val4C 

但其實我是想這樣的結果:

pk_id | col1 | col2 | col3 | col4 
=============================================== 
1  | val1 | val2 | val3 | val4A;val4B;val4C 

如何更改「選擇」查詢來實現這個結果與COL4值val4A,val4B,val4C的組合值(用分號隔開)?

+1

在你的位置,我會創建一個函數,返回'varchar2'這將是從第二個表中正確值的聚合。 – yamny 2014-08-29 07:11:35

+2

http://stackoverflow.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-rows-in-oracle – 2014-08-29 07:15:11

+0

什麼是你的數據庫版本? – San 2014-08-29 07:15:59

回答

2

您可以使用LISTAGG

select pk_id,col1,col2,col3, 
        LISTAGG (t2.col4, ';') WITHIN GROUP (ORDER BY t2.col4) AS col4 
from t1 left join t2 on t1.pk_id=t2.fk_id 
group by pk_id, col1, col2, col3; 
+0

錯誤:ORA -00937:沒有單組功能 – jondinham 2014-08-29 07:39:33

+2

缺少'分組'? – jondinham 2014-08-29 07:42:48

+1

啊,對不起,我添加了group by子句。 – yalpertem 2014-08-29 08:19:05