首页 > 解决方案 > 更高级别聚合的总和

问题描述

我在下面的代码中定义了一个表,我希望所有值的总和为 ALLDays,在本例中为 Ajan 36 和 Sam 21。我如何修改下面的查询来获得它,我不允许使用windows功能。我可以通过将另一个查询按学生分组并加入两者来实现要求,但是有没有办法修改下面的查询以满足要求。任何帮助深表感谢。

DECLARE @Table 
TABLE(Student varchar(50),
subject varchar(50)
,days int)

Insert into @Table
values('Ajan','English',8),('Ajan','Math',9),('Ajan','Science',7),('Ajan','English',5),('Ajan','Math',4),('Ajan','Science',3),
('Sam','English',7),('Sam','Math',6),('Sam','Science',8)


select student,subject,sum(days) as SubjectDays,'' as AllDays from @Table
group by student,subject  

标签: sqlansi-sql

解决方案


如果您不能使用窗口函数,那么一种替代方法是对学生和学科级别的天数总和使用两个单独的子查询。

select t1.student, t1.subject, t1.SubjectDays, t2.AllDays
from
(
    select student, subject, sum(days) as SubjectDays
    from @Table
    group by student, subject
) t1
inner join
(
    select student, sum(days) as AllDays
    from @Table
    group by student
) t2
    on t1.student = t2.student;

推荐阅读