mysql行转列、列转行

行转列

数据准备

建表:

CREATE TABLE`student`(`ID`int(10)NOT NULL AUTO_INCREMENT,`USER_NAME`varchar(20)DEFAULT NULL,`COURSE`varchar(20)DEFAULT NULL,`SCORE`float DEFAULT'0',PRIMARY KEY(`ID`))ENGINE=InnoDB AUTO_INCREMENT=10DEFAULT CHARSET=utf8;

新增数据:

insertintostudent(USER_NAME,COURSE,SCORE)values("张三","数学",34),("张三","语文",58),("张三","英语",58),("李四","数学",45),("李四","语文",87),("李四","英语",45),("王五","数学",76),("王五","语文",34),("王五","英语",89);

源数据:

行转列图一

SELECTuser_name,MAX(CASEcourseWHEN'数学'THENscoreELSE0END)数学,MAX(CASEcourseWHEN'语文'THENscoreELSE0END)语文,MAX(CASEcourseWHEN'英语'THENscoreELSE0END)英语FROMstudentGROUPBYUSER_NAME;

行转列后:

行转列图二

列转行

数据准备

建表:

CREATE TABLE `grade`(`ID`int(10)NOTNULLAUTO_INCREMENT,`USER_NAME`varchar(20)DEFAULTNULL,`CN_SCORE`floatDEFAULTNULL,`MATH_SCORE`floatDEFAULTNULL,`EN_SCORE`floatDEFAULT'0',PRIMARY KEY(`ID`))ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8;

新增数据:

insertintograde(USER_NAME,CN_SCORE,MATH_SCORE,EN_SCORE)values("张三",34,58,58),("李四",45,87,45),("王五",76,34,89);

源数据:

列转行图一.jpg

selectuser_name,'语文'COURSE,CN_SCOREasSCOREfromgradeunionselectuser_name,'数学'COURSE,MATH_SCOREasSCOREfromgradeunionselectuser_name,'英语'COURSE,EN_SCOREasSCOREfromgradeorder by user_name,COURSE;

列转行后:

列转行图二.jpg

链接:https://www.jianshu.com/p/5a2dae144238

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容