在 MySQL 中,我們經(jīng)常會遇到需要將豎表轉(zhuǎn)換為橫表的需求。豎表指的是以行為單位存儲數(shù)據(jù)的表,而橫表則是以列為單位存儲數(shù)據(jù)的表。在某些場景下,橫表的存儲方式更加直觀和方便查詢。本文將詳細(xì)介紹 MySQL 豎表轉(zhuǎn)橫表的實(shí)現(xiàn)方法。
我們以以下豎表為例:
ame | attribute | value
----|------|-----------|-------
1 | A | height | 170
1 | A | weight | 60
2 | B | height | 165
2 | B | weight | 55
ame 表示姓名,attribute 表示屬性,value 表示屬性值。我們希望將其轉(zhuǎn)換為以下橫表:
ame | height | weight
----|------|--------|--------
1 | A | 170 | 60
2 | B | 165 | 55
以下是實(shí)現(xiàn)方法的 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 函數(shù)和 CASE WHEN 語句將 attribute 和 value 轉(zhuǎn)換為列。當(dāng) attribute 為 height 時(shí),我們將 value 賦值給 height 列;當(dāng) attribute 為 weight 時(shí),我們將 value 賦值給 weight 列。
ame 分組,確保每個(gè)人只有一行記錄。
以下是一個(gè)完整的代碼示例,供讀者參考:
-- 創(chuàng)建豎表ame` (t(11) NOT NULL,ame` varchar(255) NOT NULL,
`attribute` varchar(255) NOT NULL,
`value` varchar(255) NOT NULLnoDBb4;
-- 插入數(shù)據(jù)ameame`, `attribute`, `value`) VALUES
(1, 'A', 'height', '170'),
(1, 'A', 'weight', '60'),
(2, 'B', 'height', '165'),
(2, 'B', 'weight', '55');
-- 豎表轉(zhuǎn)橫表
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 豎表轉(zhuǎn)橫表的實(shí)現(xiàn)方法,并提供了一個(gè)完整的代碼示例。讀者可以根據(jù)自己的需求進(jìn)行修改和擴(kuò)展。如果有任何疑問或建議,請?jiān)谠u論區(qū)留言。