Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyahpivot Lajur Dipisahkan Koma dalam DB2 Menggunakan SQL Rekursif?

Bagaimana untuk Menyahpivot Lajur Dipisahkan Koma dalam DB2 Menggunakan SQL Rekursif?

DDD
Lepaskan: 2024-12-18 02:48:10
asal
236 orang telah melayarinya

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

Menyahpivoting Lajur Dipisahkan Koma dalam DB2

Storan data dengan lajur dipisahkan koma boleh menimbulkan cabaran. Pertanyaan ini menunjukkan cara mengubah data sedemikian dalam DB2 menggunakan teknik SQL rekursif.

Pertimbangkan jadual awal:

Id | FK_ID | Reference
-----------------------
1    2100   GI2, GI32
2    2344   GI56
Salin selepas log masuk

Hasil yang diingini adalah untuk memisahkan nilai yang dipisahkan koma kepada berbilang baris:

Id | FK_ID | Reference
-----------------------
1    2100   GI2 
2    2100   GI32
3    2344   GI56
Salin selepas log masuk

Menggunakan SQL rekursif, kita boleh mencapai ini transformasi:

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
Salin selepas log masuk

Nota: Penyelesaian ini menganggap bilangan nilai yang dipisahkan koma tidak melebihi 99. Melaraskan keadaan lvl boleh meningkatkan nilai yang disokong.

Atas ialah kandungan terperinci Bagaimana untuk Menyahpivot Lajur Dipisahkan Koma dalam DB2 Menggunakan SQL Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan