0

我觉得这是一个相对简单的问题,但我很难阐明这个问题以找到答案。我得到的数据格式与我需要的完全不同,因此我尝试使用 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

我感谢您的帮助!

4

2 回答 2

0

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

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

这适用于 PostgreSQL: select groupid,array_to_string(array_agg(pid),',') from t group by groupid;

于 2013-09-20T18:59:24.553 回答
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
于 2013-09-20T20:26:44.550 回答