在处理成绩数据时,有时需要将数据横向排列以方便比较和分析。使用 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