MySQL 資料透視表列資料作為行
資料透視表是將資料從基於列的格式轉換為行的強大工具-為基礎的格式。在 MySQL 中,可以使用 CASE 表達式結合聚合函數來實現此轉換。
要將給定資料轉換為資料透視表格式,其中問題答案顯示為列,可以使用以下查詢:
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
在此查詢中,CASE 表達式用於檢查Question 表的問題列,並從Answers 表中傳回對應的答案。然後使用聚合函數 MAX 來尋找每個問題的最大值,該值代表為該問題提供的答案。
動態透視
對於數字問題的數量未知或較大,可以使用以下程式碼產生動態SQL 語句:
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;
此程式碼產生動態SQL 語句,可以處理任意數量的問題。它透過將每個問題的最大值連接為列名稱來動態建構 SELECT 子句。
查詢的結果將是具有所需格式的資料透視表,其中每個問題的答案顯示為單獨的列.
以上是如何以問題答案為列來透視 MySQL 表資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!