Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memindahkan Lajur Dinamik kepada Baris dalam MySQL dengan Nilai Lebih Besar Daripada 0?

Bagaimana untuk Memindahkan Lajur Dinamik kepada Baris dalam MySQL dengan Nilai Lebih Besar Daripada 0?

Mary-Kate Olsen
Lepaskan: 2024-12-11 20:31:11
asal
867 orang telah melayarinya

How to Transpose Dynamic Columns to Rows in MySQL with Values Greater Than 0?

Memindahkan Lajur Dinamik kepada Baris: Mencapai Transformasi yang Diingini

Pengenalan:
Menyahpivoting data daripada lajur ke dalam rows ialah operasi biasa dalam manipulasi data. Artikel ini meneroka cara menukar lajur dinamik dalam Jadual_1, dengan mengambil kira hanya nilai yang lebih besar daripada 0, untuk mendapatkan Jadual_Keputusan_Jangkaan yang dikehendaki.

Fungsi UNPIVOT MySQL:
MySQL tidak menyediakan UNPIVOT secara asli. fungsi. Walau bagaimanapun, kaedah berikut boleh digunakan untuk mencapai hasil yang diingini:

Pendekatan Berasaskan Lajur Statik:
Untuk bilangan lajur statik yang terhad, anda boleh menggunakan satu siri UNION SEMUA penyataan untuk mencipta jadual yang diubah suai. Setiap pernyataan akan memilih lajur tertentu sebagai Word dan Qty. Pendekatan ini sesuai untuk skema statik dengan bilangan lajur yang diketahui.

Pendekatan Berasaskan Lajur Dinamik:
Untuk skema dinamik dengan bilangan lajur yang tidak diketahui, pendekatan yang lebih sofistikated ialah diperlukan. Anda boleh menggunakan pernyataan yang disediakan untuk menjana SQL dinamik yang akan memaksi lajur. Ini melibatkan penciptaan pernyataan UNION ALL secara dinamik untuk setiap lajur.

Contoh untuk Lajur Dinamik:
Pertanyaan MySQL yang disediakan menunjukkan cara menukar lajur dalam Jadual_1 menggunakan pendekatan dinamik:

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

Kesimpulan:
Oleh menggunakan sama ada pendekatan statik atau dinamik, anda boleh menukar lajur dinamik dengan berkesan dalam MySQL, dengan mengambil kira hanya nilai yang lebih besar daripada 0, untuk mendapatkan struktur berasaskan baris yang diingini yang diwakili oleh Jadual_Hasil_Dijangka.

Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Lajur Dinamik kepada Baris dalam MySQL dengan Nilai Lebih Besar Daripada 0?. 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