如何修改SQL查询将多行计算结果合并为单一行总和?
解决SQL查询汇总问题
你的问题核心是需要将每行计算出的差值进行累加,得到一个总合,而不是返回每行单独的结果。原来的查询会对符合条件的每一行TranPOSHeader记录计算差值,所以返回了10和20两个结果;要得到总和30,只需要用SUM()聚合函数把整个计算表达式包裹起来即可。
修改后的查询语句
SELECT SUM( GrandTotal - RecPayAmount - (SELECT COALESCE(SUM(detail.LineAmount), 0) FROM TranPOSDetail as detail WHERE detail.RefHeaderCode = TranPOSHeader.Code AND EntryFlag = 4) ) AS TotalDifference FROM TranPOSHeader WHERE VoucherTypeCode=2000 AND WalkInCustomerCode=200429 AND GrandTotal > RecPayAmount;
关键说明
- SUM() 聚合函数:把每行的计算结果累加起来,直接得到所有符合条件记录的差值总和。
- COALESCE() 函数:我额外加上了这个函数,用来处理当
TranPOSHeader没有匹配的TranPOSDetail记录时的情况——此时子查询会返回NULL,用COALESCE(..., 0)可以把NULL转换成0,避免整个计算结果变成NULL,保证总和的准确性。
执行这个修改后的查询,就会直接返回你想要的结果:30。
内容的提问来源于stack exchange,提问作者Krunal Shah
相关产品推荐
相关产品推荐

