首頁 > 資料庫 > mysql教程 > 如何在 MySQL 中透視資料:將列轉換為行?

如何在 MySQL 中透視資料:將列轉換為行?

Susan Sarandon
發布: 2025-01-09 15:12:39
原創
392 人瀏覽過

How to Pivot Data in MySQL: Transforming Columns into Rows?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板