SQL sever 中查询所有学生学号、姓名、院系、选修课程数、考试通过的课程数、获得的总学分。,不要使用case when,统计为0的部分用NULL代替
时间: 2024-12-15 15:20:25 浏览: 14
在SQL Server中,你可以使用JOIN操作和聚合函数来完成这个查询。假设我们有三个相关的表:Students(包含学生的ID、姓名和院系)、Courses(包含课程信息,如课程ID和选修的学生ID)、Enrollments(记录学生选课情况,字段包括学生ID和课程ID),以及Grades(记录学生的考试成绩,字段包括学生ID、课程ID和成绩)。下面是一个示例查询:
```sql
SELECT
s.StudentID AS 学号,
s.Name AS 姓名,
s.Department AS 院系,
COUNT(e.CourseID) OVER (PARTITION BY s.StudentID) AS 选修课程数,
(SELECT COUNT(*) FROM Grades g WHERE g.StudentID = e.StudentID AND g.PassGrade = 1) AS 考试通过的课程数,
(SELECT SUM(Credits) FROM Courses c JOIN Enrollments en ON c.CourseID = en.CourseID WHERE en.StudentID = s.StudentID) AS 总学分
FROM
Students s
JOIN
Enrollments e ON s.StudentID = e.StudentID;
```
在这个查询中,`COUNT(e.CourseID)` 计算每个学生的选修课程总数,`(SELECT COUNT(*) FROM Grades g WHERE ...)` 判断每个学生通过了多少门课程(这里假设PassGrade=1表示通过),`SUM(Credits)` 计算每个学生的总学分。
注意,由于没有直接给出“考试通过”的定义,这里假设"PassGrade=1"代表考试通过,如果实际情况不同,你需要调整grade条件。另外,如果某些表的结构或字段名称在实际数据库中有所不同,这个查询需要相应地修改。
阅读全文