在 MySQL 中,我們經常會遇到需要將豎表轉換為橫表的需求。豎表指的是以行為單位存儲數據的表,而橫表則是以列為單位存儲數據的表。在某些場景下,橫表的存儲方式更加直觀和方便查詢。本文將詳細介紹 MySQL 豎表轉橫表的實現方法。
我們以以下豎表為例:
ame | attribute | value
----|------|-----------|-------
1 | A | height | 170
1 | A | weight | 60
2 | B | height | 165
2 | B | weight | 55
ame 表示姓名,attribute 表示屬性,value 表示屬性值。我們希望將其轉換為以下橫表:
ame | height | weight
----|------|--------|--------
1 | A | 170 | 60
2 | B | 165 | 55
以下是實現方法的 SQL 語句:
SELECT
id,ame,
MAX(CASE WHEN attribute = 'height' THEN value ELSE NULL END) AS height,
MAX(CASE WHEN attribute = 'weight' THEN value ELSE NULL END) AS weight
FROMame
GROUP BY
id,ame;
解釋如下:
ame 字段。
然后,我們使用 MAX 函數和 CASE WHEN 語句將 attribute 和 value 轉換為列。當 attribute 為 height 時,我們將 value 賦值給 height 列;當 attribute 為 weight 時,我們將 value 賦值給 weight 列。
ame 分組,確保每個人只有一行記錄。
以下是一個完整的代碼示例,供讀者參考:
-- 創建豎表ame` (t(11) NOT NULL,ame` varchar(255) NOT NULL,
`attribute` varchar(255) NOT NULL,
`value` varchar(255) NOT NULLnoDBb4;
-- 插入數據ameame`, `attribute`, `value`) VALUES
(1, 'A', 'height', '170'),
(1, 'A', 'weight', '60'),
(2, 'B', 'height', '165'),
(2, 'B', 'weight', '55');
-- 豎表轉橫表
SELECT
id,ame,
MAX(CASE WHEN attribute = 'height' THEN value ELSE NULL END) AS height,
MAX(CASE WHEN attribute = 'weight' THEN value ELSE NULL END) AS weight
FROMame
GROUP BY
id,ame;
本文介紹了 MySQL 豎表轉橫表的實現方法,并提供了一個完整的代碼示例。讀者可以根據自己的需求進行修改和擴展。如果有任何疑問或建議,請在評論區留言。