如何在Db2 中將逗號分隔的列轉換為多行
許多應用程式需要將資料儲存在關聯表結構中,其中每筆記錄代表一個唯一的實體及其屬性。然而,有時資料的結構可能不同,例如在單列中採用逗號分隔的格式。將此類資料轉換為關係結構可能具有挑戰性,但 Db2 提供了使用遞歸 SQL 的解決方案。
讓我們考慮一個範例,其中表格包含具有逗號分隔值的欄位:
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
此查詢逆透視並迭代地將逗號分隔的值拆分為單獨的行。結果是所需格式的關係表。注意:查詢尚未經過測試,可能需要進行細微調整。
以上是如何在 Db2 中將逗號分隔值逆透視為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!