2016-08-30 57 views
0

我試圖返回單個描述如果主鍵是相等的,例如,我有這種返回:返回從多個列的獨特線路

CD_TABLE | DS_TABLE | DS_ANOTHER_TABLE 
------ | ------ | ------ 
1  | TEST-01 | TEST-X 
2  | TEST-02 | TEST-Y 
2  | TEST-02 | TEST-W 
3  | TEST-03 | TEST-Z 

作爲第二和第三行是相同的信息在第一列中,有沒有辦法以這種方式返回?

CD_TABLE | DS_TABLE | DS_ANOTHER_TABLE 
------ | ------ | ------ 
1  | TEST-01 | TEST-X 
2  | TEST-02 | TEST-Y, TEST-W 
3  | TEST-03 | TEST-Z 

回答

4

listagg功能似乎符合這個要求:

SELECT cd_table, ds_table, 
     LISTAGG(ds_another_table, ', ') WITHIN GROUP (ORDER BY ds_another_table) 
FROM  mytable 
GROUP BY cd_table, ds_table 
+0

記住,'LISTAGG'有一定的侷限性。如果連接的結果超過4000個字符,它將返回一個錯誤。 –

+1

@HepC。 。 。對listagg()的限制不如對Oracle中字符串數據類型的限制。你有同樣的問題是你試圖用'||'連接字符串。 –

+0

謝謝@Mureinik,但它與「WITHIN GROUP」合作。爲什麼我的問題收到反對票? – dsd