CREATE TABLE t1 ( id int, name varchar(10) ); INSERT INTO t1 SELECT 1 AS id, ‘greg‘ AS name UNION ALL SELECT 2, ‘paul‘ UNION ALL SELECT 3, ‘greg‘ UNION ALL SELECT 4, ‘greg‘ UNION ALL SELECT 5, ‘paul‘; COMMIT; SELECT name, MAX(DECODE(row_number, 1, a.id)) || NVL(MAX(DECODE(row_number, 2, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 3, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 4, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 5, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 6, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 7, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 8, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 9, ‘,‘ || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 10, ‘,‘ || a.id)), ‘‘) id FROM (SELECT name, id, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) row_number FROM t1) a GROUP BY a.name ORDER BY a.name;
Result
name | id
------ -------
greg | 1,3,4
paul | 2,5