Sql 如何让学生学业进步?

Sql 如何让学生学业进步?,sql,sql-server,tsql,Sql,Sql Server,Tsql,课程表 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 报名表 stu

课程表

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分,则可获得学分。我想忽略那些没有获得任何学分的学生(例如,詹姆斯·邦德因为没有获得任何学分而被忽略)


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

你可以有条件地求和,以获得主题的分数。若并没有给出任何结果,那个么结果将为空,所以在having子句中过滤掉那个些学生/课程对

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


介绍SQL的txFiddle@NikolaMarkovinović,requirment说,如果获得的分数超过50分,将获得学分,因此无需报名。结果>=50@zia如果我不得不引用自己的话:
我已经将>50条件改为>=50,因为你的结果与你的要求相矛盾
@Zia:更具体地说,当谈到结果时,尼古拉指的是OP输出中劳拉·克罗夫特的
30
。因为,如果条件真的是
>50
,她的结果应该是
15
@AndriyM谢谢。我试图深入了解这一点,但我的英语不及格:-)
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),
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