Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Lajur Jadual MySQL ke Baris?

Bagaimana untuk Mengubah Data Lajur Jadual MySQL ke Baris?

Barbara Streisand
Barbara Streisandasal
2024-12-25 19:37:10962semak imbas

How to Pivot MySQL Table Column Data into Rows?

Data Lajur Jadual Pangsi MySQL sebagai Baris

Untuk memutar data lajur jadual sebagai baris dalam MySQL, anda boleh menggunakan gabungan MAX( ) dan CASE berfungsi bersama dengan klausa GROUP BY. Berikut ialah sintaks umum:

SELECT
  GROUP_BY_COLUMNS,
  MAX(CASE WHEN condition1 THEN column1 END) AS column1_alias,
  MAX(CASE WHEN condition2 THEN column2 END) AS column2_alias,
  ...
FROM TABLE
GROUP BY GROUP_BY_COLUMNS

Dalam contoh yang disediakan, anda mempunyai tiga jadual: Soalan, yang mengandungi soalan soal selidik; Keputusan, yang memautkan pengguna kepada pekerjaan; dan Jawapan, yang mengandungi jawapan pengguna kepada soalan.

Untuk memutarkan jawapan soalan sebagai lajur bagi setiap set hasil, anda boleh menggunakan pertanyaan berikut:

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

Pertanyaan ini menggabungkan Jadual jawapan dengan jadual Soalan berdasarkan medan fk_question_id dan jadual Keputusan berdasarkan medan fk_result_id. Ia kemudian mengumpulkan hasil mengikut lajur ID, user_ID dan job_id, dan untuk setiap kumpulan, ia mengira jawapan maksimum untuk setiap soalan menggunakan fungsi MAX() dan pernyataan CASE.

Sebagai alternatif, jika anda mempunyai bilangan soalan yang tidak diketahui, anda boleh menggunakan pertanyaan SQL dinamik yang membina rentetan pertanyaan berdasarkan soalan yang tersedia:

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;

Pertanyaan dinamik membina pembolehubah @sql dengan lajur yang diperlukan untuk setiap soalan dan melaksanakannya sebagai pernyataan yang disediakan.

Pertanyaan ini akan mengembalikan jawapan soalan sebagai lajur untuk setiap set hasil, membolehkan anda memaparkannya dalam bentuk yang mesra pengguna format.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Lajur Jadual MySQL ke Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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