まず、Kent Milligan と彼の記事http://www.mcpressonline.com/sql/techtip-combining-multiple-row-values-into-a-single-row-with-sql-in-db2-に感謝する必要があります。 for-i.htmlは、この問題を可能な限り解決してくれました。しかし今、私は彼がここで行ったことを拡張する必要があります。
彼の記事に行かなくても済むように、彼が対処した問題は、複数の行の文字列データを結果のテーブルの 1 つの行に連結することでした。例えば:
テーブルカー:
- モデルを作る
- フォード・フュージョン
- シボレー・タホ
- ホンダ オデッセイ
- フォード・トーラス
- フォード・フォーカス
- シボレー マリブ
結果:
- モデルを作る
- シボレー・マリブ、タホ
- フォード フォーカス、トーラス、フュージョン
- ホンダ オデッセイ
これは、次の SQL ステートメントで行われました。
WITH numbered_sets(make, model, curr, prev) AS (
SELECT make, model,
ROW_NUMBER() OVER (PARTITION BY make ORDER BY model) AS curr,
ROW_NUMBER() OVER (PARTITION BY make ORDER BY model) -1 AS prev
FROM inventory)
SELECT make,
MAX (TRIM(L ',' FROM
CAST(SYS_CONNECT_BY_PATH(model, ',') AS VARCHAR(256)) ))
FROM numbered_sets
START WITH curr = 1
CONNECT BY make = PRIOR make AND prev = PRIOR curr
GROUP BY make
私はそれを自分のテーブルに適応させることができ、私が望んでいた場所のほとんどを手に入れることができました. しかし、私の目的のために、グループ化のために含める必要がある追加の列があります。例えば:
テーブルカー:
- タイプモデルを作る
- フォード セダン フュージョン
- シボレー SUV タホ
- ホンダ ミニバン オデッセイ
- フォード セダン トーラス
- フォード セダン フォーカス
- シボレー セダン マリブ
- フォードSUVエスケープ
- フォード SUV エクスプローラー
- シボレー セダン インパラ
結果については、次を探します。
- タイプモデルを作る
- シボレー セダン マリブ、インパラ
- シボレー SUV タホ
- フォード セダン フュージョン、トーラス、フォーカス
- フォード SUV エスケープ、エクスプローラー
- ホンダ ミニバン オデッセイ
TYPE 列を追加できるようにするために元のステートメントに何を追加する必要があるか、それに応じて GROUP を追加する必要があることについて、誰か考えがありますか? 私はいくつかのことを試しましたが、CONNECT_BY_PATH ステートメントで何かをする必要があると思われます。
ありがとうございました