Oracle 11g hat diese nette Funktion LISTAGG, die ziemlich genau das ist, was Sie wollen, aber da Sie auf 10g sind, steht Ihnen diese nicht zur Verfügung (es sei denn, Sie entscheiden sich für ein Upgrade).
Wenn Sie aus irgendeinem Grund nicht auf 11g upgraden möchten (oder aus welchen Gründen auch immer nicht können), würde ich vorschlagen, sich einige Alternativen zu LISTAGG anzusehen, die Ihnen auf 10g zur Verfügung stehen.
Sie können sich einige der vorgeschlagenen Alternativen ansehen hier
Schnell angepasst eine schnelle Anpassung einer der vorgeschlagenen Alternativen an Ihr Fallbeispiel:
WITH Q AS
(
SELECT 'North' POD, 'Rony' NAME FROM DUAL UNION ALL
SELECT 'North', 'James' FROM DUAL UNION ALL
SELECT 'North', 'Aby' FROM DUAL UNION ALL
SELECT 'South', 'Sam' FROM DUAL UNION ALL
SELECT 'South', 'Willy' FROM DUAL UNION ALL
SELECT 'West', 'Mike' FROM DUAL
)
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(e, name||',') ORDER BY name).EXTRACT('//text()'),
','
) AS name
FROM q
GROUP BY POD;
Denken Sie jedoch daran, dass dies nicht die eigentliche Lösung ist, da Sie sie entsprechend Ihrem Tisch (nicht dem Dummy-DUAL-Tisch) usw. anpassen müssen.
Ihre Lösung wird wahrscheinlich in etwa so aussehen:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Wenn Sie das Trennzeichen ändern möchten, können Sie es in diesem Teil von Komma ändern:
(E, NAME||',')
Das RTRIM dient nur dazu, das nachgestellte Komma am Ende der verketteten Zeichenfolge abzuschneiden. Wenn Sie das nachgestellte Komma nicht stört, können Sie die RTRIM-Funktion weglassen, um die Lesbarkeit zu erhalten.