国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql表數據行列轉換方法

2020-03-22 19:48:14
字體:
來源:轉載
供稿:網友
開發過程中,因為歷史原因或性能原因,需要對表的列數據轉為行數據,或行數據轉換為列數據使用,本文將介紹mysql表數據行列轉換的方法,提供完整演示例子及sql技巧。

1.行轉列

創建測試數據表及數據

CREATE TABLE `option` ( `category_id` int(10) unsigned NOT NULL COMMENT 分類id , `name` varchar(20) NOT NULL COMMENT 名稱 , KEY `category_id` (`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `option` (`category_id`, `name`) VALUES(1, 大 ),(1, 中 ),(1, 小 ),(2, 奔馳 ),(2, 寶馬 ),(3, 2015 ),(3, 2016 ),(3, 2017 ),(3, 2018 ),(4, 1m ),(4, 2m mysql select * from `option`;+-------------+--------+| category_id | name |+-------------+--------+| 1 | 大 || 1 | 中 || 1 | 小 || 2 | 奔馳 || 2 | 寶馬 || 3 | 2015 || 3 | 2016 || 3 | 2017 || 3 | 2018 || 4 | 1m || 4 | 2m |+-------------+--------+

行轉列后,期望得到以下結果

+-------------+---------------------+| category_id | name |+-------------+---------------------+| 1 | 大,中,小 || 2 | 奔馳,寶馬 || 3 | 2015,2016,2017,2018 || 4 | 1m,2m |+-------------+---------------------+


行轉列,可以使用group_concat()函數結合group by實現。

group_concat()函數可以得到表達式結合體的連結值,默認分隔符為逗號,可以通過separator設置為其他分隔符。

注意:group_concat()函數對返回的結果有長度限制,默認為1024字節,不過對于正常的情況已經足夠。

關于group_concat()函數的使用可以參考我之前的文章:《mysql函數concat與group_concat使用說明》

執行結果:

mysql select category_id,group_concat(name) as name from `option` group by category_id order by category_id;+-------------+---------------------+| category_id | name |+-------------+---------------------+| 1 | 大,中,小 || 2 | 奔馳,寶馬 || 3 | 2015,2016,2017,2018 || 4 | 1m,2m |+-------------+---------------------+
2.列轉行


創建測試數據表及數據

CREATE TABLE `option2` ( `category_id` int(10) unsigned NOT NULL COMMENT 分類id , `name` varchar(100) NOT NULL COMMENT 名稱集合 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `option2` (`category_id`, `name`) VALUES(1, 大,中,小 ),(2, 奔馳,寶馬 ),(3, 2015,2016,2017,2018 ),(4, 1m,2m mysql select * from `option2`;+-------------+---------------------+| category_id | name |+-------------+---------------------+| 1 | 大,中,小 || 2 | 奔馳,寶馬 || 3 | 2015,2016,2017,2018 || 4 | 1m,2m |+-------------+---------------------+

列轉行后,期望得到以下結果

+-------------+--------+| category_id | name |+-------------+--------+| 1 | 大 || 1 | 中 || 1 | 小 || 2 | 奔馳 || 2 | 寶馬 || 3 | 2015 || 3 | 2016 || 3 | 2017 || 3 | 2018 || 4 | 1m || 4 | 2m |+-------------+--------+


列轉行比行轉列復雜,對于列內容是用分隔符分隔的數據,我們可以使用substring_index()函數進行分割輸出,并結合笛卡爾積來實現循環。

select a.category_id,substring_index(substring_index(a.name, , ,b.category_id), , ,-1) as name from `option2` as ajoin `option2` as b on b.category_id =(length(a.name) - length(replace(a.name, , , ))+1)order by a.category_id,b.category_id;


執行結果:

mysql select a.category_id,substring_index(substring_index(a.name, , ,b.category_id), , ,-1) as name from `option2` as a - join `option2` as b on b.category_id =(length(a.name) - length(replace(a.name, , , ))+1) - order by a.category_id,b.category_id;+-------------+--------+| category_id | name |+-------------+--------+| 1 | 大 || 1 | 中 || 1 | 小 || 2 | 奔馳 || 2 | 寶馬 || 3 | 2015 || 3 | 2016 || 3 | 2017 || 3 | 2018 || 4 | 1m || 4 | 2m |+-------------+--------+

本文講解了mysql表數據行列轉換方法,更多相關內容請關注php 。

相關推薦:

nginx快速查看配置文件的方法

php 多個一維數組合拼成二維數組的方法

php 返回數組中指定多列的方法

以上就是mysql表數據行列轉換方法的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄平县| 萨嘎县| 芦山县| 申扎县| 濉溪县| 龙门县| 浮梁县| 通河县| 临泽县| 建昌县| 田阳县| 德钦县| 南涧| 高安市| 钦州市| 鄂尔多斯市| 鹤山市| 建水县| 永安市| 郎溪县| 高淳县| 芒康县| 永济市| 和政县| 孝感市| 东丰县| 中西区| 江城| 临安市| 土默特左旗| 昭觉县| 大同市| 鄂尔多斯市| 怀宁县| 花莲县| 达尔| 临海市| 广元市| 辽阳市| 铜鼓县| 辽阳市|