You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:55:18