Oracle 11gには、この優れた関数LISTAGGがあります。これは、ほぼ必要なものですが、10gを使用しているため、アップグレードすることを決定しない限り、これを使用することはできません。
何らかの理由で11gにアップグレードしたくない(または何らかの理由でアップグレードできない)場合は、10gで利用できるLISTAGGの代替案を検討することをお勧めします。
提案された代替案のいくつかをチェックすることができます
ケースシナリオに一致するように、提案された代替案の1つの迅速な適応を迅速に調整しました:
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関数を省略できます。