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
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
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
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!