MySQL 資料透視:將列轉換為行
MySQL 中,需要透過將列轉換為行來產生透視表,以便更好地呈現資料。例如,考慮一個表,其中包含多個欄位(例如,col1、col2),代表不同月份的資料(例如,一月、二月)。
需求: 建立一個以透視表格式呈現資料的報表,其中每一行代表原始表中的一列,每一列代表不同的月份。
資料展開:
MySQL 缺少用於展開資料(將列轉換為行)的內建函數。但是,這可以透過 UNION ALL 查詢來實現:
<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable</code>
結果:
此查詢將資料轉換為以下格式:
ID | MONTH | VALUE | DESCRIP |
---|---|---|---|
101 | Jan | A | col1 |
101 | Jan | B | col2 |
101 | Jan | NULL | col3 |
101 | Jan | B | col4 |
102 | Feb | C | col1 |
102 | Feb | A | col2 |
102 | Feb | G | col3 |
102 | Feb | E | col4 |
資料透視:
資料展開後,可以使用聚合函數將其轉換為所需的透視表格式。以下查詢使用 CASE 語句按每列 (descrip) 分組數據,並顯示一月和二月的值:
<code class="language-sql">SELECT descrip, MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan, MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb FROM ( SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable ) src GROUP BY descrip</code>
結果:
此查詢產生所需的透視表格式:
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
以上是如何在 MySQL 中透視資料:將列轉換為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!