ホームページ > データベース > mysql チュートリアル > 再帰 SQL を使用して DB2 のカンマ区切りデータをアンピボットする方法

再帰 SQL を使用して DB2 のカンマ区切りデータをアンピボットする方法

Susan Sarandon
リリース: 2024-12-31 12:51:11
オリジナル
227 人が閲覧しました

How to Unpivot Comma-Separated Data in DB2 Using Recursive SQL?

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

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