Oracle 11g има тази удобна функция LISTAGG, която е почти това, което искате, но тъй като сте на 10g, това не е достъпно за вас (освен ако не решите да надстроите).
Ако по някаква причина не желаете (или не можете поради каквито и да било причини) да надстроите до 11g, бих ви предложил да разгледате някои алтернативи на LISTAGG, които са достъпни за вас на 10g.
Можете да разгледате някои от предложените алтернативи тук
Бързо коригирана бърза адаптация на една от предложените алтернативи, за да съответства на вашия случай:
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;
Но не забравяйте, че това не е действителното решение, тъй като ще трябва да го приспособите според вашата таблица (а не фиктивната DUAL таблица) и т.н...
Вашето решение вероятно ще изглежда нещо подобно на:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Ако искате да промените разделителя, можете да го промените от запетая в тази част:
(E, NAME||',')
RTRIM е там само за да отреже запетая в края на свързания низ, ако не ви притеснява запетая в края, можете да пропуснете функцията RTRIM, за да запазите четливостта.