六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于mysql表數據行列轉換方法的講解

[摘要]開發過程中,因為歷史原因或性能原因,需要對表的列數據轉為行數據,或行數據轉換為列數據使用,本文將介紹mysql表數據行列轉換的方法,提供完整演示例子及sql技巧。 1.行轉列創建測試數據表及數據CR...

開發過程中,因為歷史原因或性能原因,需要對表的列數據轉為行數據,或行數據轉換為列數據使用,本文將介紹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 實現多個一維數組合拼成二維數組的方法

講解php 返回數組中指定多列的相關方法

關于php 基于redis計數器類的詳解

以上就是關于mysql表數據行列轉換方法的講解的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 亚洲综合精品一二三区在线 | 欧美视频一区二区三区 | 亚洲狠狠婷婷综合久久久久图片 | 欧美综合第一页 | 欧美中文字幕 | 午夜影视免费完整高清在线观看网站 | 天天天天天干 | 日本综合色 | 日韩一级在线观看 | 亚洲高清免费在线观看 | 午夜色片 | 日本福利片国产午夜久久 | 色老头久久久久久久久久 | 特级淫片国产免费高清视频 | 欧美性视频在线 | 日韩有码第一页 | 日韩一区二区三区四区不卡 | 日韩免费视频一区 | 四虎影视在线影院www | 日韩大片在线 | 色综合久久综合网观看 | 中文字幕福利视频 | 青青青青爽极品在线视频 | 日韩香蕉网 | 无码中文av有码中文av | 伊人久久网站 | 中文字幕乱视频 | 日本护士后进式猛烈动态图片 | 四虎精品久久久久影院 | 热久久久久久久 | 青青色在线 | 热久久99影院 | 亚洲欧洲一区二区三区在线观看 | 亚洲欧美综合一区 | 欧美特黄三级成人 | 日本不卡高清视频 | 人人看人人鲁狠狠高清 | 日韩黄色一级片 | 日日摸夜夜欧美一区二区 | 欧美整片在线 | 日本剧情片大全免费的视频 |