我觉得这是一个相对简单的问题,但我无法明确表达问题以找到答案。我得到的数据格式与我需要的格式完全不同,因此我尝试使用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
感谢您的帮助!
答案 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