首页 > 解决方案 > 如何通过别名列值的总和找到总和?

问题描述

在这里,我试图计算SUM特定学生在特定财政年度以及该财政年度每个月支付的学费金额。

例如,在下面的行PaidTutionFee中是由 计算的SUM(Tution) AS PaidTutionFee。现在我想要的是汇总PaidTutionFee列,

StudentId   FYID    Month   PaidTutionFee
7           16      3       2855.00
7           16      4       2855.00

为此,我总结了 Tution ieSUM(Tution) AS PaidTutionFee和 group by StudentId, FYId, Month,它将给出该财政年度每个月的 Tution 总和,最后是整个财政年度支付的 Tution 总和,我总结了SUM(Tution) AS PaidTutionFeeie的别名SUM(PaidTutionFee) AS TotalTutionFeeInFiscalYear

现在的问题是我抛出一个错误说

Msg 207, Level 16, State 1, Line 11
Invalid column name 'PaidTutionFee'.


下面是我的 sql server 查询

SELECT StudentId,FYId, Month, SUM(Tution) AS PaidTutionFee, 
SUM(PaidTutionFee) AS TotalTutionFeeInFiscalYear
FROM [dbo].[FeePaymentDetails]
WHERE FYId = 16 AND StudentId = 7 
GROUP BY StudentId, FYId, Month

标签: c#asp.net-core-mvcsql-server-2017

解决方案


您不能在同一个 SELECT 语句中聚合聚合。但是......这并不是你真正想要的。您想要tuition分组时的总和以及分组时StudentID, FYid, Month的总和(如果我没看错的话)。为此,您可以使用窗口函数:tuitionStudentID, FYid

SELECT StudentId,FYId, Month, SUM(Tution) AS PaidTutionFee
Sum(Tution) OVER (PARTITION BY SutdentID, FyID) as TotalTutionFeeInFiscalYear
FROM [dbo].[FeePaymentDetails]
WHERE FYId = 16 AND StudentId = 7 
GROUP BY StudentId, FYId, Month;

现在您的结果集的粒度处于该StudentId, FYId, Month级别,但是您有一个额外的列,它的值针对每个不同的重复值StudentId, FYId,它的值表示您所追求的更高粒度级别的总和。


推荐阅读