Tukar baris secara dinamik kepada lajur dalam pertanyaan MySQL
Banyak operasi data memerlukan penukaran baris kepada lajur dan melaraskan bilangan lajur secara dinamik berdasarkan bilangan baris. MySQL tidak secara langsung menyokong operasi pangsi ini, tetapi terdapat teknik untuk mensimulasikannya.
Salah satu cara ialah menggunakan fungsi GROUP BY
dan MAX
. Kita boleh membuat lajur untuk setiap pesanan dengan mengumpulkan baris berdasarkan lajur tertentu (cth., id) dan kemudian menggunakan fungsi MAX
untuk mendapatkan nilai maksimum bagi setiap pesanan dalam kumpulan itu. Sebagai contoh, pertanyaan berikut menukarkan baris dalam jadual A kepada lajur dalam jadual hasil:
<code class="language-sql">SELECT ID, MAX(IF(`order` = 1, data, NULL)) data1, MAX(IF(`order` = 2, data, NULL)) data2 FROM TableA GROUP BY ID</code>
Jika pesanan mempunyai berbilang nilai, SQL dinamik mungkin merupakan pilihan yang lebih baik. Ini membolehkan rentetan pertanyaan dibuat secara dinamik, memastikan bilangan lajur sepadan dengan bilangan pesanan. Berikut ialah contoh:
<code class="language-sql">SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`) ) INTO @sql FROM TableName; SET @sql = CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;</code>
Kedua-dua kaedah akan menghasilkan jadual keputusan yang diingini:
<code>╔════╦═══════╦═══════╗ ║ ID ║ DATA1 ║ DATA2 ║ ╠════╬═══════╬═══════╣ ║ 1 ║ P ║ S ║ ║ 2 ║ R ║ Q ║ ╚════╩═══════╩═══════╝</code>
Kaedah ini menyediakan cara yang cekap untuk menukar baris secara dinamik kepada lajur dalam pertanyaan MySQL, memastikan keputusan menyesuaikan diri dengan perubahan dalam data asas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Baris secara Dinamik kepada Lajur dalam Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!