c# - 如何通过别名列值的总和找到总和?
问题描述
在这里,我试图计算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 PaidTutionFee
ie的别名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
解决方案
您不能在同一个 SELECT 语句中聚合聚合。但是......这并不是你真正想要的。您想要tuition
分组时的总和以及分组时StudentID, FYid, Month
的总和(如果我没看错的话)。为此,您可以使用窗口函数:tuition
StudentID, 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
,它的值表示您所追求的更高粒度级别的总和。
推荐阅读
- c# - SignalR Core redis 背板 - 有两种扩展方式吗?
- plot - 如何修复箱形图(SAS)中重叠的x轴?
- javascript - 来自 AJAX 的响应文本为空白
- powershell - 转换 System.Object[] 和取消引用属性
- list - 从嵌套列表中提取有序(根据值)集合,基于列表的最后一项,Java
- python - 层 conv2d_6 的输入 0 与层不兼容:预期 ndim=4,发现 ndim=3。收到的完整形状:[28, 28, 1]
- java - 如何从 Hotspot VM 中提取 JITed 代码?
- android - 当我只能处理文件或文件路径时如何处理 SAF?
- excel - 使用间接访问另一个工作表中的单元格范围
- java - 如何在 Java 8 管道中多次显示重复的字符串?