Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyahpivot Lajur Dinamik ke dalam Baris dalam MySQL?

Bagaimana untuk Menyahpivot Lajur Dinamik ke dalam Baris dalam MySQL?

Linda Hamilton
Lepaskan: 2024-12-10 07:46:09
asal
834 orang telah melayarinya

How to Unpivot Dynamic Columns into Rows in MySQL?

Membuat Baris daripada Lajur Dinamik

Dalam bidang pengurusan data, memanipulasi lajur dan baris selalunya diperlukan. Soalan ini menyelidiki tugas khusus: menukar berbilang lajur dinamik kepada jadual baharu dengan baris yang mengandungi kriteria khusus.

Contoh yang diberikan menggambarkan penyahpivotan Jadual_1, menghasilkan Jadual_Keputusan_Dijangka. Perbezaan utama ialah Expected_Result_Table memaparkan setiap nilai bukan sifar dalam baris yang berasingan.

MySQL tidak mempunyai fungsi UNPIVOT langsung, tetapi had ini boleh diatasi menggunakan pernyataan UNION ALL. Pendekatan asas melibatkan mencipta pernyataan SELECT berasingan untuk setiap lajur, memilih ID, nama lajur sebagai nilai "perkataan" dan nilai lajur sebagai nilai "qty". Pernyataan SELECT ini kemudiannya digabungkan menggunakan UNION ALL.

Contohnya:

SELECT id, 'abc' AS word, abc AS qty
FROM yt
WHERE abc > 0
UNION ALL
SELECT id, 'brt', brt
FROM yt
WHERE brt > 0
Salin selepas log masuk

Pendekatan ini menjadi lebih kompleks apabila berurusan dengan lajur dinamik. Untuk menangani ini, kenyataan yang disediakan boleh digunakan. Ia membenarkan penjanaan dinamik pernyataan SQL berdasarkan metadata.

Coretan kod berikut menunjukkan pendekatan sedemikian:

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
WHERE c.table_name = 'yt'
  AND c.column_name NOT IN ('id')
ORDER BY c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Salin selepas log masuk

Dalam contoh ini, SQL dinamik dibina menggunakan maklumat daripada jadual maklumat_schema.columns. Penyataan stmt yang disediakan kemudiannya digunakan untuk melaksanakan SQL yang dijana secara dinamik, menyahpaut lajur dinamik menjadi baris dengan berkesan.

Dengan melaksanakan pendekatan ini, adalah mungkin untuk mengubah lajur dinamik kepada baris, memenuhi keperluan data tertentu.

Atas ialah kandungan terperinci Bagaimana untuk Menyahpivot Lajur Dinamik ke dalam Baris dalam MySQL?. 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