SQL查询语句行转列横向显示实例解析

1. 什么是行转列横向显示?

行转列,顾名思义就是将一行数据转换成一列数据进行显示。在数据库的查询中,我们经常需要将一些数据进行行转列的操作,通常情况下,我们会使用 CASE WHEN 等条件语句进行数据的转换,从而把行转列,方便数据的处理和展示。

2. SQL查询语句行转列横向显示实例解析

2.1 示例说明

下面我们通过一个示例来说明如何使用SQL查询语句实现行转列横向显示。

我们有一个如下所示的学生表:

CREATE TABLE student (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(50) DEFAULT NULL,

gender VARCHAR(2) DEFAULT NULL,

score1 INT(11) DEFAULT NULL,

score2 INT(11) DEFAULT NULL,

score3 INT(11) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

我们现在需要统计每个学生的三门成绩并将其转换为列显示。

数据如下:

INSERT INTO student (name,gender,score1,score2,score3)

VALUES ('张三','男',90,85,92),

('李四','男',80,92,87),

('王五','女',82,88,91),

('赵六','女',86,90,85);

现在我们可以使用如下的SQL查询语句将其行转列并横向显示:

SELECT 

name,

MAX(CASE WHEN gender = '男' THEN score1 ELSE NULL END) AS '男生语文',

MAX(CASE WHEN gender = '男' THEN score2 ELSE NULL END) AS '男生数学',

MAX(CASE WHEN gender = '男' THEN score3 ELSE NULL END) AS '男生英语',

MAX(CASE WHEN gender = '女' THEN score1 ELSE NULL END) AS '女生语文',

MAX(CASE WHEN gender = '女' THEN score2 ELSE NULL END) AS '女生数学',

MAX(CASE WHEN gender = '女' THEN score3 ELSE NULL END) AS '女生英语'

FROM

student

GROUP BY

name;

上述SQL查询语句的含义是:将学生表按照姓名进行分组,然后使用 MAX(CASE WHEN) 条件语句将每个学生的三门成绩转换为列,其中语文、数学、英语各为一列,男生的成绩和女生的成绩分别在一行中显示。

2.2 示例解析

我们可以分别解析一下每个条件语句的作用:

MAX(CASE WHEN gender = '男' THEN score1 ELSE NULL END) AS '男生语文'

这个条件语句的作用是,当学生的性别为男时,将其语文成绩作为该列的数据;否则,显示为NULL。

MAX(CASE WHEN gender = '男' THEN score2 ELSE NULL END) AS '男生数学'

这个条件语句的作用是,当学生的性别为男时,将其数学成绩作为该列的数据;否则,显示为NULL。

MAX(CASE WHEN gender = '男' THEN score3 ELSE NULL END) AS '男生英语'

这个条件语句的作用是,当学生的性别为男时,将其英语成绩作为该列的数据;否则,显示为NULL。

MAX(CASE WHEN gender = '女' THEN score1 ELSE NULL END) AS '女生语文'

这个条件语句的作用是,当学生的性别为女时,将其语文成绩作为该列的数据;否则,显示为NULL。

MAX(CASE WHEN gender = '女' THEN score2 ELSE NULL END) AS '女生数学'

这个条件语句的作用是,当学生的性别为女时,将其数学成绩作为该列的数据;否则,显示为NULL。

MAX(CASE WHEN gender = '女' THEN score3 ELSE NULL END) AS '女生英语'

这个条件语句的作用是,当学生的性别为女时,将其英语成绩作为该列的数据;否则,显示为NULL。

通过上述条件语句,我们实现了将行数据转换为列数据显示的效果。

3. 总结

行转列横向显示在数据库查询中是非常常见的操作,通常使用条件语句如 CASE WHEN 等进行实现。在使用时,要根据实际场景进行调整,进行相应的聚合、分组、过滤等操作,从而使查询结果更加符合预期。

数据库标签