在 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,我們可以實現這點轉換:
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。調整lvl條件可以增加支援的值。
以上是如何使用遞歸 SQL 在 DB2 中反轉逗號分隔列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!