首頁 > 資料庫 > mysql教程 > 如何使用遞歸 SQL 在 DB2 中逆透視逗號分隔的資料?

如何使用遞歸 SQL 在 DB2 中逆透視逗號分隔的資料?

Susan Sarandon
發布: 2024-12-31 12:51:11
原創
227 人瀏覽過

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

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板