CREATE TABLE t1 ( id int, name varchar(10));INSERT INTO t1SELECT 1 AS id, ‘greg‘ AS nameUNION ALLSELECT 2, ‘paul‘UNION ALLSELECT 3, ‘greg‘UNION ALLSELECT 4, ‘greg‘UNION ALLSELECT 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)), ‘‘) idFROM (SELECT name, id, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) row_number FROM t1) aGROUP BY a.nameORDER BY a.name;
Result
name | id------+------- greg | 1,3,4 paul | 2,5