複数レコードを集計したい場合にはブログ - 「WARP4.8新機能紹介 ~ レコードの集計」やFAQ - 「フローで複数レコードのキーごとの値を集計することはできますか?」にあるようにRecordAggregateを使うと簡単です。
今回は、合計や平均などではなく値を連結してみることを考えてみました。
例えばKey-Valueのようなテキストデータを想定します。
Key,Value
----------
AUTHOR,adn
TITLE,ASTERIA WARPサーバーの設定を別のサーバーに移行するには?
BASENAME,asteria_warp
STATUS,Publish
ALLOW COMMENTS,0
CONVERT BREAKS,richtext
ALLOW PINGS,0
PRIMARY CATEGORY,パイプラインサービス
CATEGORY,インストール/バージョンアップ
CATEGORY,インストール/バージョンアップ
CATEGORY,パイプラインサービス
CATEGORY,フローサービス
DATE,11/29/2007 10:00:00 AM
TAGS,移行
Keyでグループ化してレコードを1つにまとめて、複数ある場合はその値を文字列結合してみようと思います。
key=CATEGORYの複数レコードを以下のように
CATEGORY,インストール/バージョンアップ:インストール/バージョンアップ:パイプラインサービス:フローサービス
と1レコードにまとめるイメージです。
TableDB関数を使えばキーに一致するレコードが複数ある場合にすべてのレコードを指定した文字で連結して出力することができるようです。
ただし、今回はデータベースのテーブルではないのでTableDB関数を使うことはできません。またTable関数、TableStream関数にはこの機能はないようです。
そこでCSVデータとして読み込んでRecordSQLを使ってSQLで直接GROUP_CONCAT関数を使ってみました。
RecordSQLのSQL文は
select field[1], group_concat( field[2] separator ':') from in[1] group by field[1]
といった感じです。
これで複数レコードの値を連結して取得することができました。
GROUP_CONCATはMySQLなどで使えるようですがHSQLDBでも使えるようです。
※WARP4.8.1以前ではRecordSQLで使えるSQL文はHSQLDB version 1.8でサポートされているSQL文のみでGROUP_CONCAT関数は使えないようなので注意してください。
他にも方法はあると思いますが開発時の参考まで。