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

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

DDD
DDDオリジナル
2024-12-18 02:48:10156ブラウズ

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

DB2 のカンマ区切り列のアンピボット

カンマ区切り列を含むデータ ストレージでは課題が発生する可能性があります。このクエリは、再帰 SQL 手法を使用して DB2 でそのようなデータを変換する方法を示しています。

最初のテーブルについて考えます:

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 を使用すると、これを実現できますtransformation:

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

注: このソリューションでは、カンマ区切りの値の数が 99 を超えないことを前提としています。レベル条件を調整すると、サポートされる値を増やすことができます。

以上が再帰 SQL を使用して DB2 のカンマ区切り列をアンピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。