用业务逻辑总结课程学分

时间:2017-03-06 16:07:50

标签: sql sql-server tsql

为了让学生在特定科目中“强调”高中毕业,他们必须在专业领域和三门核心课程的特定列表中完成至少一门入门课程。我试图显示学生的学分数,并可用于指派学生“强调”。问题是学生可以参加许多可能适用于专业领域的入门级课程,但只有其中一个应该计入总学分。或者反之亦然,如果他们有四门核心课程但没有入门课程,则不能分配。以下是我的发言。关于这一切的一切都告诉我这是一个循环,但我知道打开游标对性能不利,并且有一种't-sql'方式最有可能这样做。

Select * From (Select ks.ks_id,
    ks.student_name,
    ks.current_grade_level, 
    cpp.title,
    ks.bldg_id, 
    Sum(cc.credits) as 'Sum of Credits Per Expertise' ,

From #KidsSilo as ks
    Inner Join cpp_courses as cc on cc.statecourse_id = ks.statecourse_id --- cpp_courses contains all the courses
    Inner Join #Cpp_expertise as cpp on cc.cpp_ID = cpp.cpp_id --- cpp_expertise contains all the Expertise' and the id link to each cpp_courses
        Where cpp.bldg_id = ks.bldg_id
            --And cc.course_level = 'X' -- Introductory, Would a nested Select Top 1 1 work for this piece?
            --And cc.course_level = 'C' -- Core classes

Group by
    ks.ks_id,
    cpp.title,
    ks.student_name, 
    ks.current_grade_level,
    ks.bldg_id) as t
Inner Join #Districts as d on d.bldg_id = t.bldg_id
order by t.bldg_id desc

1 个答案:

答案 0 :(得分:3)

如果你有一个课程表:

  • 课程ID
  • 专门知识
  • 水平

在学生参加课程的注册表中,我希望这样的查询:

select e.student_id, c.expertise
from enrollment e join
     courses c
     on e.course_id = c.course_id
group by e.student_id, c.expertise
having sum(case when level = 'introductory' then 1 else 0 end) >= 1 and
       sum(case when level = 'core' then 1 else 0 end) >= 3;

您的数据模型非常不清楚,但也许这会有所帮助。