Oracle 11g har den här snygga funktionen LISTAGG som är i stort sett vad du vill ha, men eftersom du är på 10g är detta inte tillgängligt för dig (såvida du inte bestämmer dig för att uppgradera).
Om du av någon anledning inte vill (eller inte kan av någon anledning) uppgradera till 11g, skulle jag föreslå att du tittar på några alternativ till LISTAGG som är tillgängliga för dig på 10g.
Du kan kolla in några av de föreslagna alternativen här
Justerade snabbt en snabb anpassning av ett av de föreslagna alternativen för att matcha ditt fall:
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;
Men kom ihåg att detta inte är den faktiska lösningen eftersom du måste skräddarsy den efter ditt bord (inte dummy DUAL-bordet) osv...
Din lösning kommer förmodligen att se ut ungefär i stil med:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Om du vill ändra avgränsaren kan du ändra den från kommatecken i denna del:
(E, NAME||',')
RTRIM är där bara för att klippa av det avslutande kommatecken från slutet av den sammanlänkade strängen, om du inte störs av det avslutande kommatecken kan du utelämna RTRIM-funktionen för att bevara läsbarheten.