2013-07-15 25 views
0

我有一张表格,表示所有学生必须参加10门课程,其中5个是强制性的,从其他5个选择3个。所以基本上有2个组。现在我需要计算总积分和总积分总和。在同一查询中具有不同范围的多重求和功能


表#1

 StudentID ProgID ProgName GroupID GroupName Course Complete_Courses_Alert Credits 
      1   100 MS  501  Mandatory 12  Remaining   3 
      1   100 MS  501  Mandatory 13  Complete   3 
      1   100 MS  501  Mandatory 14  Complete   3 
      1   100 MS  501  Mandatory 15  Remaining   3 
      1   100 MS  501  Mandatory 16  Complete   3 
      1   100 MS  502  Elective 17  Complete   3 
      1   100 MS  502  Elective 18  Complete   3 
      1   100 MS  502  Elective 19  Remaining   3 
      1   100 MS  502  Elective 20  Complete   3 
      1   100 MS  502  Elective 21  Remaining   3 

我想要的输出作为

上表中,但更添加到它2个字段。

完成学分的,即总和(总学分) 和点心完成学分(按组)

这是我迄今所做的, 我创建了一个视图计算总学分和GrouptotalCredits然后joinin它在主查询上。这样我再次需要创建另一个视图来执行更多的查询功能..

任何人都可以帮忙。

回答

1

我认为你正在寻找的东西,如:

select * 
    , StudentGroupCredits = sum(case when Complete_Courses_Alert = 'Complete' then Credits else 0 end) over (partition by StudentId, GroupName) 
    , StudentTotalCredits = sum(case when Complete_Courses_Alert = 'Complete' then Credits else 0 end) over (partition by StudentId) 
from Courses 

SQL Fiddle with demo

在Books Online查看OVER Clause了解更多信息。

+0

上述查询按照组和按程序添加所有学分,但不会为已完成的课程添加。 –

+0

我已经更新了查询,只将“完成”行添加到两个总计中;这是否更好? –

+0

非常感谢伊恩。它完美的作品。试图创建一个视图来做到这一点。您是否随时使用物化视图。如果是,请告诉我它是如何工作的。非常感谢您 –

相关问题