确定唯一的多对多关系sql

时间:2013-09-20 18:52:12

标签: sql many-to-many

我觉得这是一个相对简单的问题,但我无法明确表达问题以找到答案。我得到的数据格式与我需要的格式完全不同,因此我尝试使用SQL对其进行预处理。我也会使用R作为解决方案做出回应。

现在我拥有的是:

pID     GroupID
A        1
A        2
A        3
B        2
B        4
C        2 
D        1
D        4 

我需要的是:

GroupID      pID
1            A,D
2            A,B,C
3            A
4            B,D

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果你使用mysql,你可以使用group by和group_concat。

例如: SELECT GroupID,group_concat(pID)FROM table_name GROUP BY GroupID

这适用于PostgreSQL: 从groupid中选择groupid,array_to_string(array_agg(pid),',');

答案 1 :(得分:0)

如果您使用的是Oracle 10或更晚,则可以使用listagg函数:

 WITH aset
         AS (SELECT 'a' pid, 1 GROUP_ID
               FROM DUAL
             UNION ALL
             SELECT 'a' pid, 2 GROUP_ID
               FROM DUAL
             UNION ALL
             SELECT 'b' pid, 2 GROUP_ID
               FROM DUAL
             UNION ALL
             SELECT 'b' pid, 3 GROUP_ID
               FROM DUAL
             UNION ALL
             SELECT 'c' pid, 2 GROUP_ID
               FROM DUAL)
      SELECT group_id,  LISTAGG (pid, ',') WITHIN GROUP (ORDER BY pid) AS pid
        FROM aset
    GROUP BY group_id

返回

GROUP_ID PID
1        a
2        a,b,c
3        b