HAVING子句报错:Scoring.Amount未在聚合函数或GROUP BY子句中
问题解决
原SQL报错是因为HAVING子句中引用的Scoring.Amount既没有包含在GROUP BY子句里,也没有用聚合函数包裹,不符合SQL分组查询的规则。
根据你的需求(基于SerialNumber,找出CreditNoteDetail表中CRAmountUSD的总和小于Scoring表中Amount值的数据),可以用两种方式修正:
方式一:将Amount加入GROUP BY子句
如果Scoring表中每个CustomerNumber + CustomerName组合对应的Amount是唯一的,直接把p.Amount加入GROUP BY即可:
Select p.CustomerNumber, p.CustomerName, p.Amount, sum(CAST(a.CRAmountUSD AS DECIMAL(10,2))) AS sumCosts From Scoring p inner join CreditNoteDetail a on p.SerialNumber = a.SerialNumber Group By p.CustomerNumber, p.CustomerName, p.Amount having sum(CAST(a.CRAmountUSD AS DECIMAL(10,2))) < CAST(p.Amount AS DECIMAL(10,2))
注意:原需求是“总和小于Amount”,所以把原SQL的>改成了<。
方式二:先聚合子查询再关联
如果同一个客户可能对应多个不同的Amount(关联不同SerialNumber),更精准的做法是先按SerialNumber计算CRAmountUSD的总和,再和Scoring表关联筛选:
Select p.CustomerNumber, p.CustomerName, p.Amount, s.sumCosts From Scoring p inner join ( Select SerialNumber, sum(CAST(CRAmountUSD AS DECIMAL(10,2))) AS sumCosts From CreditNoteDetail Group By SerialNumber ) s on p.SerialNumber = s.SerialNumber where s.sumCosts < CAST(p.Amount AS DECIMAL(10,2))
这种方式更贴合“基于SerialNumber”的需求逻辑,先按SerialNumber聚合,再和Scoring表匹配筛选。
内容的提问来源于stack exchange,提问作者Ortups RSP
相关产品推荐
相关产品推荐

