在DB2 中反轉逗號分隔的資料
在資料庫設計中,將多個引用儲存在以逗號分隔的單一列中是不明智的。這種做法可能會導致效率低下和數據不一致。但是,可能會出現這樣的情況:您繼承了具有此類資料結構的資料庫,因此有必要將其轉換為規範化形式。
要在 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中文網其他相關文章!