Data Lajur Jadual Pangsi MySQL sebagai Baris
Jadual pangsi ialah alat yang berkuasa untuk menukar data daripada format berasaskan lajur kepada baris- format berasaskan. Dalam MySQL, transformasi ini boleh dicapai menggunakan ungkapan CASE bersama-sama dengan fungsi pengagregatan.
Untuk menukar data yang diberikan kepada format jadual pangsi, di mana jawapan soalan dipaparkan sebagai lajur, pertanyaan berikut boleh digunakan:
SELECT a.ID, a.user_ID, a.job_id, MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?', MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?', MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id
Dalam pertanyaan ini, ungkapan CASE digunakan untuk menyemak lajur soalan jadual Soalan dan mengembalikan jawapan yang sepadan daripada Jawapan meja. Fungsi pengagregatan MAX kemudiannya digunakan untuk mencari nilai maksimum bagi setiap soalan, yang mewakili jawapan yang disediakan untuk soalan itu.
Pengantaran Dinamik
Untuk kes di mana nombor soalan tidak diketahui atau besar, pernyataan SQL dinamik boleh dijana menggunakan kod berikut:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN c.question = ''', question, ''' then b.answer end) AS ', CONCAT('`',question,'`') ) ) INTO @sql FROM Question; SET @sql = CONCAT('SELECT a.ID, a.user_ID, a.job_id, ', @sql, ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Kod ini menjana pernyataan SQL dinamik yang boleh mengendalikan sebarang bilangan soalan. Ia membina klausa SELECT secara dinamik dengan menggabungkan nilai maksimum untuk setiap soalan sebagai nama lajur.
Hasil pertanyaan akan menjadi jadual pangsi dengan format yang dikehendaki, di mana setiap jawapan soalan dipaparkan sebagai lajur yang berasingan .
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Jadual MySQL dengan Jawapan Soalan sebagai Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!