Oracle 11g ha questa funzione ordinata LISTAGG che è praticamente ciò che desideri, tuttavia poiché sei su 10g questo non è disponibile per te (a meno che tu non decida di eseguire l'aggiornamento).
Se per qualche motivo non desideri (o non puoi per qualsiasi motivo) eseguire l'aggiornamento a 11 g, ti suggerisco di cercare alcune alternative a LISTAGG che sono disponibili per te su 10 g.
Puoi controllare alcune delle alternative proposte qui
Adattamento rapido di una delle alternative proposte per adattarla allo scenario del tuo caso:
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;
Ma ricorda che questa non è la vera soluzione in quanto dovrai adattarla in base al tuo tavolo (non al tavolo DUAL fittizio) ecc...
La tua soluzione probabilmente avrà un aspetto simile a:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Se vuoi cambiare il delimitatore puoi cambiarlo dalla virgola in questa parte:
(E, NAME||',')
L'RTRIM è lì solo per tagliare la virgola finale dalla fine della stringa concatenata, se non sei infastidito dalla virgola finale puoi omettere la funzione RTRIM per preservare la leggibilità.