You could use LISTAGG
:
WITH tableA AS
(
SELECT '001' AS COLA, 'AA1' AS COLB, 460 AS COLC FROM dual
UNION ALL SELECT '001','AB1',380 FROM dual
UNION ALL SELECT '001','AC1',950 FROM dual
)
SELECT DISTINCT
LISTAGG(COLA, ', ') WITHIN GROUP (ORDER BY 1) AS COLA,
LISTAGG(COLB, ', ') WITHIN GROUP (ORDER BY 1) AS COLB,
LISTAGG(COLC, ', ') WITHIN GROUP (ORDER BY 1) AS COLC
FROM tableA
WHERE COLA = '001';
SqlFiddleDemo
Output:
╔════════════════╦════════════════╦═══════════════╗
║ COLA ║ COLB ║ COLC ║
╠════════════════╬════════════════╬═══════════════╣
║ 001, 001, 001 ║ AA1, AB1, AC1 ║ 380, 460, 950 ║
╚════════════════╩════════════════╩═══════════════╝
But I would add also OVER
clause and remove duplicates from COLA
:
WITH tableA AS
(
SELECT '001' AS COLA, 'AA1' AS COLB, 460 AS COLC FROM dual
UNION ALL SELECT '001','AB1',380 FROM dual
UNION ALL SELECT '001','AC1',950 FROM dual
)
SELECT DISTINCT
COLA,
LISTAGG(COLB, ', ') WITHIN GROUP (ORDER BY 1) OVER(PARTITION BY COLA) AS COLB,
LISTAGG(COLC, ', ') WITHIN GROUP (ORDER BY 1) OVER(PARTITION BY COLA) AS COLC
FROM tableA
WHERE COLA = '001';
SqlFiddleDemo2
SqlFiddleDemo3