ホームページ >データベース >mysql チュートリアル >再帰 SQL を使用して DB2 のカンマ区切り列をアンピボットする方法
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 サイトの他の関連記事を参照してください。