2

まず、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 ステートメントで何かをする必要があると思われます。

ありがとうございました

4

1 に答える 1