複数レコードのキーごとに値を連結してみる

RecordAggregate_RecordSQL.png

複数レコードを集計したい場合にはブログ - 「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つにまとめて、複数ある場合はその値を文字列結合してみようと思います。

GROUP_CONCAT01.PNG

key=CATEGORYの複数レコードを以下のように

CATEGORY,インストール/バージョンアップ:インストール/バージョンアップ:パイプラインサービス:フローサービス

と1レコードにまとめるイメージです。

GROUP_CONCAT02.PNG

TableDB関数を使えばキーに一致するレコードが複数ある場合にすべてのレコードを指定した文字で連結して出力することができるようです。

GROUP_CONCAT06.PNG

ただし、今回はデータベースのテーブルではないのでTableDB関数を使うことはできません。またTable関数、TableStream関数にはこの機能はないようです。

そこでCSVデータとして読み込んでRecordSQLを使ってSQLで直接GROUP_CONCAT関数を使ってみました。

GROUP_CONCAT04.PNG

RecordSQLのSQL文は

select field[1], group_concat( field[2] separator ':') from in[1] group by field[1]

といった感じです。

これで複数レコードの値を連結して取得することができました。

GROUP_CONCAT05.PNG

GROUP_CONCATはMySQLなどで使えるようですがHSQLDBでも使えるようです。

※WARP4.8.1以前ではRecordSQLで使えるSQL文はHSQLDB version 1.8でサポートされているSQL文のみでGROUP_CONCAT関数は使えないようなので注意してください。

他にも方法はあると思いますが開発時の参考まで。

この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています

他のキーワードで検索する