Db2 でカンマ区切りの列を複数の行に変換する方法
多くのアプリケーションでは、データをリレーショナル テーブル構造に格納する必要があります。各レコードは一意のエンティティとその属性を表します。ただし、単一列内のカンマ区切り形式など、データの構造が異なる場合があります。このようなデータをリレーショナル構造に変換するのは困難な場合がありますが、Db2 は再帰 SQL を使用したソリューションを提供します。
テーブルにカンマ区切りの値を持つ列が含まれる例を考えてみましょう。
Id | FK_ID | Reference ----------------------- 1 2100 GI2, GI32 2 2344 GI56
私たちの目標は、このデータを複数の行を含むテーブルに変換し、各行が個別のデータを表すことです。参照:
Id | FK_ID | Reference ----------------------- 1 2100 GI2 2 2100 GI32 3 2344 GI56
以下の再帰 SQL クエリはこの変換を実現します。
WITH unpivot (lvl, id, fk_ref, reference, tail) AS ( SELECT 1, id, fk_ref, CASE WHEN LOCATE(',',reference) > 0 THEN TRIM(LEFT(reference, LOCATE(',',reference)-1)) ELSE TRIM(reference) END, CASE WHEN LOCATE(',',reference) > 0 THEN SUBSTR(reference, LOCATE(',',reference)+1) ELSE '' END FROM yourtable UNION ALL SELECT lvl + 1, id, fk_ref, CASE WHEN LOCATE(',', tail) > 0 THEN TRIM(LEFT(tail, LOCATE(',', tail)-1)) ELSE TRIM(tail) END, CASE WHEN LOCATE(',', tail) > 0 THEN SUBSTR(tail, LOCATE(',', tail)+1) ELSE '' END FROM unpivot WHERE lvl < 100 AND tail != '') SELECT id, fk_ref, reference FROM unpivot
このクエリはピボットを解除し、カンマ区切りの値を個別の行に繰り返し分割します。結果として、目的の形式のリレーショナル テーブルが得られます。注: クエリはテストされていないため、若干の調整が必要な場合があります。
以上がDb2 でコンマ区切り値を複数の行にアンピボットする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。