添加IN子句后触发选择列表未包含在聚合或GROUP BY子句报错如何解决
问题原因
该报错是SQL Server的分组聚合校验规则触发的:当查询使用GROUP BY分组时,SELECT列表中所有的字段要么属于GROUP BY指定的分组字段,要么被聚合函数(如MAX/MIN/SUM等)包裹,否则数据库无法确定分组后多值字段的返回规则。
你新增的test4子查询中直接引用了外层的SI.RecordID,该字段既没有出现在GROUP BY列表中,也没有被聚合函数包裹,因此触发报错。
注:你之前写的
SoldDate子查询没有触发该错误,是因为子查询内部重新定义了别名SI,引用的是子查询内部的表而非外层的SI表,不存在未聚合字段的引用问题。
解决方案
根据你的业务需求,可以二选一调整:
方案1:不改变原有分组粒度
如果不需要调整当前的分组规则,只需获取当前分组下所有SI.RecordID对应的最大事务日期,只需在子查询外层包裹MAX聚合函数即可:
MAX((SELECT max(sih2.TransactionDate) from SS_Inventory_History sih2 where sih2.InventoryID = SI.RecordID)) as test4
方案2:调整分组粒度
如果你需要按单条SS_Inventory记录的维度分组计算,直接将SI.RecordID添加到GROUP BY的字段列表末尾即可:
GROUP BY WarehouseName, WarehouseID, Location, Part_Number, Dist_Part_Num, SI.RecordID
注意:该方案会让分组粒度变细,最终返回的行数会比原来多,需要确认符合业务预期。
内容的提问来源于stack exchange,提问作者Sarfaraz Jamal
相关产品推荐
相关产品推荐

