Oracle 11g har denne smarte funktion LISTAGG, der er stort set, hvad du ønsker, men da du er på 10g, er dette ikke tilgængeligt for dig (medmindre du beslutter dig for at opgradere).
Hvis du af en eller anden grund ikke ønsker (eller af en eller anden grund ikke kan) opgradere til 11g, vil jeg foreslå, at du ser på nogle alternativer til LISTAGG, som er tilgængelige for dig på 10g.
Du kan tjekke nogle af de foreslåede alternativer her
Hurtigt justeret en hurtig tilpasning af et af de foreslåede alternativer for at matche dit case-scenarie:
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 husk, at dette ikke er den egentlige løsning, da du bliver nødt til at skræddersy den efter dit bord (ikke dummy DUAL-bordet) osv...
Din løsning vil sandsynligvis se noget i retning af:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Hvis du vil ændre afgrænsningstegnet, kan du ændre det fra komma i denne del:
(E, NAME||',')
RTRIM er der bare for at klippe det efterfølgende komma fra enden af den sammenkædede streng, hvis du ikke er generet af det efterfølgende komma, kan du udelade RTRIM-funktionen for at bevare læsbarheden.