电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

SQL四种方法实现行列转换超详细

来源:金蝶云社区作者:金蝶2024-09-162

SQL四种方法实现行列转换超详细

前言

大家好,我是爱孤独又爱你,在未来的日子里我们一起来学习大数据SQL相关的技术,一起努力奋斗,遇见更好的自己!

本文详细的介绍了多个方法实现列转行,行转列,并提供了案例的材料,有需要的小伙伴可以自行获取与学习~

  • 数据准备

  •  CREATE TABLE `score` (

  •    `id` varchar(255),

  •    `subject` char(10),

  •    `score` int

  •  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


  •  insert  into `score`(`id`,`subject`,`score`) values ('1','MATH',90),('1','ENGLISH',98),('1','CHINESE',85),('2','MATH',87),('2','ENGLISH',78),('2','CHINESE',89);

  • image.webpㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ

  • 1.使用join拼接

  •  SELECT id,score as 'MATH' FROM score WHERE subject = 'MATH';

  • 我们把其他几门科目的成绩查出来后当做临时表再使用join不就解决了该问题吗?!而连接条件便是std。看到这,大家可以自己试一试。完整代码如下:


  • SELECT * FROM

  • ( SELECT id, score AS 'MATH' FROM score WHERE subject = 'MATH' ) AS t1

  • JOIN ( SELECT id, score FROM score WHERE subject = 'ENGLISH' ) AS t2 ON t1.id = t2.id

  • JOIN ( SELECT id, score FROM score WHERE subject = 'CHINESE' ) AS t3 ON t1.id = t3.id

  • image.webp

  • 然后我们只需要对上述的结果,挑选出我们想要的数据即可

  • SELECT t1.id, t1.MATH, t2.score AS 'ENGLISH',t3.score AS 'CHINESE' FROM

  • ( SELECT id, score AS 'MATH' FROM score WHERE subject = 'MATH' ) AS t1

  • JOIN ( SELECT id, score FROM score WHERE subject = 'ENGLISH' ) AS t2 ON t1.id = t2.id

  • JOIN ( SELECT id, score FROM score WHERE subject = 'CHINESE' ) AS t3 ON t1.id = t3.id

image.webpㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ

  • 2.自然拼接

  • 自动的寻找2表中的(所有)同名且属性相同的列作为连接条件。使用natural join子句来完成。

  • 例如:A表中有列a,b,c,d B表中有a,b,x,z

  • 自然连接会将A.a=B.a and A.b=B.b 作为连接条件

  • select * from A natural join B (natural 不可以省略)。他们所得的结果中,同名且属性相同的字段只显示一个。


  • 对于自然连接而言,连接两个table之后,两个table共用的属性就会合并在一起。如果连个table没有共有的属性,则进行笛卡尔乘积,也就是进行两两相乘,如果table 1有3行,table 2有4行,自然连接后就有12行。自然连接的语法如下:

  • SELECT * FROM

  • ( SELECT id, score AS 'MATH' FROM score WHERE subject = 'MATH' ) AS t1

  • NATURAL JOIN ( SELECT id, score AS 'ENGLISH' FROM score WHERE SUBJECT = 'ENGLISH' ) AS t2

  • NATURAL JOIN ( SELECT id, score AS 'CHINESE' FROM score WHERE SUBJECT = 'CHINESE' ) AS t3

image.webp

  • 3.使用union拼接

  • union:会将两个结果集进行并集处理,不包括重复的行;

  • union all:对两个结果集进行并集处理,包括重复行。

  • 日常开发中,能使用union all就使用union all

  • SELECT id,score AS 'MATH',0 AS 'ENGLISH',0 AS 'CHINESE' FROM score WHERE subject = 'MATH';

  • image.webp

  • (SELECT id,score AS 'MATH',0 AS 'ENGLISH',0 AS 'CHINESE' FROM score WHERE subject = 'MATH')

  • UNION ALL

  • (SELECT id,0 AS 'MATH',score AS 'ENGLISH',0 AS 'CHINESE' FROM score WHERE subject = 'ENGLISH')

  • UNION ALL

  • (SELECT id,0 AS 'MATH',0 AS 'ENGLISH',score AS '

SQL四种方法实现行列转换超详细

前言大家好,我是爱孤独又爱你,在未来的日子里我们一起来学习大数据SQL相关的技术,一起努力奋斗,遇见更好的自己!本文详细的介绍了多个...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信