课程表
course_code course_name credit_points_reqd
1 Comp Science 300
2 Soft Engineering 300
主题表
subject_code subject_name credit_points
CS123 C Prog 15
CS124 COBOL 15
报名表
student_id student_name course_code subject_code Results
1 Lara Croft 1 CS123 70
1 Lara Croft 1 CS124 50
2 Tom Raider 2 CS123 60
2 Tom Raider 2 CS124 40
3 James Bond 1 CS123 NULL
3 James Bond 1 CS124 40
输出表
student_name course_name credit_points_obt credit_points_reqd
Lara Croft Comp Science 30 300
Tom Raider Soft Engineering 15 300
我目前正在使用TSQL。所以情况就是这样。我已经准备好了这些表来获得输出,就像我在那里展示的那样。我需要计算获得的学分。如果学生收到>,则可以获得学分。 50他们参加了一个主题。我想忽略那些根本没有收到任何学分的学生(例如詹姆斯邦德被忽略,因为他还没有获得任何积分)
select student_name, course_name,credit_points_obt,credit_points_reqd
FROM enrolment (SELECT student_full_name, SUM(credit_points) AS credit_points_obt
FROM enrolment
GROUP BY student_id),
完全陷入困境......我现在不知道该去哪里。
答案 0 :(得分:2)
您可以有条件地加总以获得主题分数。如果没有给出结果将为null,所以你在having子句中过滤掉那些学生/课程对。
我已经改变了> 50条件为> = 50因为您的结果与您的要求相矛盾。另外,根据数据,我说你已经省略了学生用餐表,但如果你没有,那就是必须的。
select enrolment.student_name,
course.course_name,
course.credit_points_reqd,
sum(case when enrolment.results >= 50
then subject.credit_points
end) credit_points_obt
FROM enrolment
inner join course
on enrolment.course_code = course.course_code
inner join subject
on enrolment.subject_code = subject.subject_code
group by enrolment.student_name,
course.course_name,
course.credit_points_reqd
having sum(case when enrolment.results >= 50
then subject.credit_points
end) is not null