ホームページ > データベース > mysql チュートリアル > Db2 でコンマ区切り値を複数の行にアンピボットする方法は?

Db2 でコンマ区切り値を複数の行にアンピボットする方法は?

Linda Hamilton
リリース: 2024-12-25 15:21:10
オリジナル
679 人が閲覧しました

How to Unpivot Comma-Separated Values into Multiple Rows in Db2?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート