トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-18 Group_Concat関数をXMLの関数で模倣

SQLパズル

KeyListテーブル
Key  Val
---  ---
AAA   12
AAA   2A
AAA   32
AAA   44
BBB   11
BBB   33
BBB   8S

KeyListテーブルをKeyごとに、
Valの昇順にカンマ区切りで文字列結合して、出力する。

出力結果
KEY  ConcatVal
---  -----------
AAA  12,2A,32,44
BBB  11,33,8S


データ作成スクリプト

前のSQLパズルと同じ


SQL

col ConcatVal for a20

select Key,
substr(
replace(
    replace(XMLAgg(XMLElement("禁則文字",Val) order by Val),'</禁則文字>'),
    '<禁則文字>',',')
,2) as ConcatVal
from KeyList
group by Key
order by Key;


解説

MySQLのGroup_Concat関数を、XMLの関数で模倣できます。

10-17 Group_Concat関数を階層問い合わせで模倣
10-56 結合して階層問い合わせ

マニュアルにのってない非公式な方法として
wmsys.wm_concatを使う方法もあります。
10-218 wmsys.wm_concat

model句を使う方法もあります。
model句04 wmsys.wm_concatの代用
model句22 MySQLのgroup_concatもどき

ORACLE-BASE - String Aggregation Techniques(英語)
stragg in 10gR2(英語)