在同一查询上具有不同Scope的多个Sum函数

时间:2013-07-15 16:21:21

标签: sql sql-server-2008 sql-server-2008-r2

我有一张桌子上写着所有学生必须参加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的视图,然后在主查询中加入它。这样我又需要创建另一个视图来在查询上执行更多功能..

任何人都可以提供帮助。

1 个答案:

答案 0 :(得分: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

查看联机丛书中的OVER Clause了解详情。