0

课程表

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),

完全卡住了……我现在不知道该去哪里。

4

1 回答 1

2

您可以有条件地求和以获得主题的分数。如果没有给出结果将是空的,所以你在有子句中过滤掉那些学生/课程对。

我已将 > 50 条件更改为 >= 50,因为您的结果与您的要求相矛盾。此外,根据数据,我会说您已经省略了学生表,但如果您没有,这是必须的。

现场测试是@Sql Fiddle

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
于 2012-05-31T08:58:36.623 回答