登录 后使用快捷导航
没有帐号?立即注册

IT撸码课程网

用户名   找回密码
  立即注册
发新帖

Mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)

[复制链接]
100 189 100
发表于2019-01-07 20:35:42 | 只看楼主 | 阅读模式
登录后查看本帖详细内容!您需要登录后才可以下载 登录 | 立即注册


我们经常遇到Mysql 行变列 的问题, 今天就引用一篇好文章


mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思


数据库结构如图:


9.png


而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现:


第一种展现如图----【多行变一列】(合并后的数据在同一列上):


10.png


sql如下:


select name ,group_concat(sore Separator ';') as score from stu group by name 

第二种展现如图----【多行变多列】(合并后的数据在不同列上):


11.png

sql如下:


SELECT name ,

MAX(CASE type WHEN '数学' THEN score ELSE 0 END ) math,

MAX(CASE type WHEN '英语' THEN score ELSE 0 END ) English ,

MAX(CASE type WHEN '语文' THEN score ELSE 0 END ) Chinese 

FROM stu  

GROUP BY name


当然,在第一种情况中(显示在一列),也有些其他的类似形式:


形式一:


12.png


sql如下:


select name ,group_concat(type,'分数为:',score  Separator '; ') as score from stu group by name 


当然 如果你很熟悉group_concat和concat的用法,你也做出如下形式:


13.png


其sql如下:


select name ,concat(name ,'的分数为[',group_concat(type,'分数为:',score  Separator '; '),']') as score from stu group by name 



IT撸码网 - 必读申明1、本站会员可发帖,本主题所有言论和图片纯属会员个人意见,与本论坛立场无关.
2、本站所有帖子由该帖子作者发表,该帖子作者享有帖子相关权益.
3、本帖内容来网友及会员分享和其它网络媒体.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意!
5、若因内容问题IT撸码网管理员和版主有权不事先通知发贴者而删除本文.
6、本站课程仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
7、本站资源质量虽均经精心审查,但也难保万无一失,若发现资源有问题影响学习请一定及时点此进行问题反馈,我们会积极为您解决问题!
8、若发现链接失效了点此进行链接失效反馈,我们会第一时间修复链接.

精彩评论0

您需要登录后才可以发帖查看详细内容! 登录 | 立即注册
*
 

本版积分规则