Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengubah Data Jadual MySQL dengan Jawapan Soalan sebagai Lajur?

Bagaimana untuk Mengubah Data Jadual MySQL dengan Jawapan Soalan sebagai Lajur?

Susan Sarandon
Lepaskan: 2024-12-21 19:31:14
asal
466 orang telah melayarinya

How to Pivot MySQL Table Data with Question Answers as Columns?

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
Salin selepas log masuk

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;
Salin selepas log masuk

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!

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