Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyahpivot Nilai Dipisahkan Koma menjadi Berbilang Baris dalam Db2?

Bagaimana untuk Menyahpivot Nilai Dipisahkan Koma menjadi Berbilang Baris dalam Db2?

Linda Hamilton
Lepaskan: 2024-12-25 15:21:10
asal
675 orang telah melayarinya

How to Unpivot Comma-Separated Values into Multiple Rows in Db2?

Cara Menukar Lajur Dipisahkan Koma kepada Berbilang Baris dalam Db2

Banyak aplikasi memerlukan data disimpan dalam struktur jadual hubungan, di mana setiap rekod mewakili entiti unik dan atributnya. Walau bagaimanapun, kadangkala data mungkin distrukturkan secara berbeza, seperti dalam format yang dipisahkan koma dalam satu lajur. Mengubah data sedemikian kepada struktur hubungan boleh menjadi mencabar, tetapi Db2 menawarkan penyelesaian menggunakan SQL rekursif.

Mari kita pertimbangkan contoh di mana jadual mengandungi lajur dengan nilai dipisahkan koma:

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

Matlamat kami adalah untuk mengubah data ini menjadi jadual dengan berbilang baris, di mana setiap baris mewakili yang berbeza rujukan:

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

Pertanyaan SQL rekursif di bawah mencapai transformasi ini:

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

Pertanyaan ini menyahpangsi dan secara berulang memisahkan nilai yang dipisahkan koma kepada baris yang berasingan. Hasilnya ialah jadual hubungan dalam format yang dikehendaki. Nota: pertanyaan belum diuji dan mungkin memerlukan pelarasan kecil.

Atas ialah kandungan terperinci Bagaimana untuk Menyahpivot Nilai Dipisahkan Koma menjadi Berbilang Baris dalam Db2?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan