查询连接内的SQL聚合行

时间:2014-03-23 12:14:48

标签: sql oracle

表:IDPerson_IDName

每个Person ID可以有多行,因为他可以有多个名字(名字,姓氏,昵称等等)。

我有另一张表,每人包含一行,其中包含其他一些数据

我希望将每个表连接成每行1行,并在最后一列中将所有人名聚合成一个字符串,如下所示:" Thomas,anderson,neo"

这样的事情:

SELECT A.*,  
       B.PERSON_ID, 
       B.(aggregated names here) 
  FROM USERS A, USERS_NAMES B;

enter image description here

我该怎么做?

1 个答案:

答案 0 :(得分:3)

我会用以下方式做到这一点:

select u.*, un.names
from users u left outer join
     (select un.person_id, listagg(un.name, ',') within group (order by un.id) as names
      from users_names un
      group by un.person_id
     ) un
     on u.person_id = un.person_id;

请注意,列表聚合正在子查询中完成。这允许在外部查询中使用u.*而不进行聚合。否则,您必须group by明确users中的每一列。{/ p>