DB2 のカンマ区切りデータのピボット解除
データベース設計では、複数の参照をカンマで区切って 1 つの列に格納するのは賢明ではありません。この方法では、非効率やデータの不整合が生じる可能性があります。ただし、このようなデータ構造を持つデータベースを継承し、正規化された形式に変換する必要がある状況が発生する場合があります。
DB2 でカンマ区切りデータをアンピボットするには、再帰 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
このクエリは、カンマ区切りのコンテンツを個別の行にアンピボットします。再帰を使用して末尾 (未処理の参照の残り) を反復処理し、カンマがあり、レベル (再帰の深さ) が 100 未満である限り、新しい行を生成します。
注:このクエリはテストされていないため、特定の環境で動作するには調整が必要な場合があります。
以上が再帰 SQL を使用して DB2 のカンマ区切りデータをアンピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。