2014-03-12 122 views
1

我想要oracle SQL查询,它应该连接两个表并从一行中的第二个表中获取所有组行。如何在一行中获取多个select查询结果

field1 field2 field3 
1   Test1 Ttest1 
1   Test2 Ttest2 
1   Test3 Ttest2 
2   Test4 Ttest2 
2   Test5 T2est2 

应该

Field 1 field2     field3 
1   Test1,Test2,Test3  Ttest1,Ttest2 
2   Test4,Test5    Ttest2 
+0

Oracle Version please! –

+0

..... Oracle - 11g – Sahal

回答

2

使用LISTAGG功能。

SELECT field1, 
     listagg(field2,',') WITHIN GROUP(ORDER BY field2) field2, 
     listagg(field3,',') WITHIN GROUP(ORDER BY field3) field3 
FROM <table_name> 
GROUP BY field1; 

使用DISTINCWM_CONCAT函数删除逗号分隔字符串的副本。

SELECT field1, 
     wm_concat(DISTINCT(field2)) field2, 
     wm_concat(DISTINCT(field3)) field3 
FROM t 
GROUP BY field1; 
1

可以使用WM_CONCAT的功能得到结果,你有mentioned.WM_CONCAT用于Concat的行列表到一个逗号分隔字符串。

SELECT DISTINCT FIELD1, 
    (SELECT WM_CONCAT(FIELD2) WHERE FIELD1 = T.FIELD1), 
    (SELECT WM_CONCAT(FIELD3) WHERE FIELD1 = T.FIELD1) 
FROM TABLE T; 

但是这个解决方案将是oracle特有的。

+0

Vijay,这将concat,但'filed1'需要分组的OPs要求 –

+0

@OracleUser感谢您的确认,我已经更新了答案。 – Vijay

相关问题