2016-08-30 58 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