三张表:
student.sql
score.sql
courses.sql
首先把三张表都关联起来,然后开始使用行列转换,查询出效果如下:
代码如下:
select e.stu_id,e.stu_name,
sum(if(e.course_name='大学语文',e.scores,0)) as "大学语文",
sum(if(e.course_name='新视野英语',e.scores,0)) as "新视野英语",
sum(if(e.course_name='离散数学',e.scores,0)) as "离散数学",
sum(if(e.course_name='概率论与数理统计',e.scores,0)) as "概率论与数理统计",
sum(if(e.course_name='线性代数',e.scores,0)) as "线性代数",
sum(if(e.course_name='高等数学<一>',e.scores,0)) as "高等数学<一>"
from
(select a.*,d.course_name,d.scores from student a inner join
(select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on a.stu_id=d.stu_id and a.stu_id='1001') e; ----------->查询张三的数据
select a.stu_id,a.stu_name,d.course_name,d.scores from student a inner join
(select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on d.stu_id=a.stu_id; ------------------>查询出所有的数据
select e.stu_id,e.stu_name,
sum(if(e.course_name='大学语文',e.scores,0)) as "大学语文",
sum(if(e.course_name='新视野英语',e.scores,0)) as "新视野英语",
sum(if(e.course_name='离散数学',e.scores,0)) as "离散数学",
sum(if(e.course_name='概率论与数理统计',e.scores,0)) as "概率论与数理统计",
sum(if(e.course_name='线性代数',e.scores,0)) as "线性代数",
sum(if(e.course_name='高等数学<一>',e.scores,0)) as "高等数学<一>"
from
(select a.stu_id,a.stu_name,d.course_name,d.scores from student a inner join
(select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on d.stu_id=a.stu_id) e group by e.stu_id; ------------------------->查询出所有的数据并且进行行列转换
注意:当需要展示多条数据时,必须加上group by 分组。
SQL成绩查询与行列转换
本文介绍了一种SQL查询技巧,通过将多个表联结并使用条件聚合函数实现特定学生或多学生的课程成绩行列转换,方便地展示不同科目的成绩。
2417

被折叠的 条评论
为什么被折叠?



