SQL Server中Claim关联可变行数CostItem的total列合计计算方法
实现方案
你直接使用SQL的SUM()聚合函数对计算出的每行total值求和即可,不需要返回明细数据,直接聚合后返回单个合计值即可,修改后的查询语句如下:
SELECT SUM(Cost * nCost) AS total FROM Claim INNER JOIN ClaimCrossCostItem ON Claim.ID = ClaimCrossCostItem.ClaimID INNER JOIN CostItem ON ClaimCrossCostItem.CostItemID = CostItem.ID WHERE CostItem.CostItemTypeID = 2 AND ClaimID = 1512969
说明
- 聚合函数
SUM()会自动对符合WHERE条件的所有行的Cost * nCost计算结果求和,不管符合条件的行数是1行还是多行,都可以正确计算合计值 - 不需要额外加
GROUP BY子句,因为你的过滤条件已经固定了单个ClaimID,查询结果只会返回一行合计数据,列名就是你需要的total - 如果你后续需要批量计算多个ClaimID的各自合计,只需要在SELECT里加上
ClaimID,再补充GROUP BY ClaimID即可,示例如下:
-- 批量查询多个ClaimID合计的示例 SELECT ClaimID, SUM(Cost * nCost) AS total FROM Claim INNER JOIN ClaimCrossCostItem ON Claim.ID = ClaimCrossCostItem.ClaimID INNER JOIN CostItem ON ClaimCrossCostItem.CostItemID = CostItem.ID WHERE CostItem.CostItemTypeID = 2 GROUP BY ClaimID
内容的提问来源于stack exchange,提问作者ajd871
相关产品推荐
相关产品推荐

