钟二网络头像

钟二网络

探索SQL查询技巧、Linux系统运维以及Web开发前沿技术,提供一站式的学习体验

  • 文章92531
  • 阅读831111
首页 SQL 正文内容

sql语句如何让成绩横排

钟逸 SQL 2024-05-25 12:35:40 40

在处理成绩数据时,有时需要将数据横向排列以方便比较和分析。使用 SQL 语句可以轻松实现成绩横排,以下介绍两种 :

UNION ALL

UNION ALL 操作符可以将多个查询结果合并成一个结果集,而不删除重复行。通过使用 UNION ALL,可以将每个学生的成绩查询为一行,再将这些行横向合并形成成绩横排表。

假设有以下成绩表:

sql

CREATE TABLE成绩表(

学号 VARCHAR(10) NOT NULL,

姓名 VARCHAR(20) NOT NULL,

语文 INT NOT NULL,

数学 INT NOT NULL,

英语 INT NOT NULL

);

使用 UNION ALL 查询成绩横排表:

sql

SELECT

学号,

姓名,

语文,

数学,

英语

FROM 成绩表

UNION ALL

SELECT

学号,

姓名,

语文,

数学,

英语

FROM 成绩表;

结果如下:

学号 姓名 语文 数学 英语

1 张三 90 85 95

1 张三 90 85 95

2 李四 75 90 80

2 李四 75 90 80

PIVOT

PIVOT 操作符可以将行数据转换为列数据。使用 PIVOT,可以将每个学生的学号和姓名作为列标题,成绩科目作为行标题,形成成绩横排表。

使用 PIVOT 查询成绩横排表:

sql

SELECT

学号,

姓名,

MAX(CASE 科目 WHEN '语文' THEN 成绩 END) AS 语文,

MAX(CASE 科目 WHEN '数学' THEN 成绩 END) AS 数学,

MAX(CASE 科目 WHEN '英语' THEN 成绩 END) AS 英语

FROM (

SELECT

学号,

姓名,

科目,

成绩

FROM 成绩表

) AS 源表

PIVOT (

MAX(成绩)

FOR 科目 IN ('语文', '数学', '英语')

) AS 横排表;

结果如下:

学号 姓名 语文 数学 英语

1 张三 90 85 95

2 李四 75 90 80

文章目录
    搜索