【发布时间】:2022-01-14 00:25:33
【问题描述】:
查询:
SELECT
A.mrno, A.remarks,
B.itemcode, B.description, B.uom, B.quantity,
C.whsecode, MAX(C.quantity) AS whseqty, D.rate
FROM
Mrhdr A
INNER JOIN
Mrdtls B ON A.mrno = B.mrno
INNER JOIN
inventoryTable C ON B.itemcode = C.itemcode
INNER JOIN
Items D ON B.itemcode = D.itemcode
WHERE
(A.mrno = @MRNo AND B.quantity < C.quantity);
错误:
列“Mrhdr.mrno”在选择列表中无效,因为它不是 包含在聚合函数或 GROUP BY 子句中。
它表示mrno 列不包含在某个东西的聚合函数中,但是当我对它做一些事情时,比如将它放在一个GROUP BY 子句中,下一个列请求返回相同的错误,直到除@ 之外的最后一列987654324@ 列,并且当它们都在 GROUP BY 子句中时,它只会返回相同的输出,而不返回数量的最高或最大值。当我使用 MAX 或聚合函数时,我应该如何处理其他列。
上面查询的输出:
如果我将所有列放在 GROUP BY 子句中,它会返回带有两个 itemcode FG 4751 的输出,它只是删除聚合函数的错误,但我只想返回最高值(仅 100 ,仓库/库存中的最高数量)。
【问题讨论】:
-
通常,如果您将某些列放在聚合函数下,那么所有其他列必须在聚合函数下或在“分组依据”子句中列出
-
请告诉我们查询应该做什么。到目前为止,您似乎想要显示数量小于产品总库存的所有 Mrdtls(可能是订单详细信息?)。因此,对于库存 10 + 10 = 20 和订单 10、15、20 和 25 的产品,您将只显示订单 10 和 15。这是您希望查询执行的操作吗?
-
您的 DBMS 是什么?请用它标记请求。 SQL 标准可能只需要
GROUP BY b.id就可以了,而其他一些 DBMS 可能需要在该子句中添加额外的列。始终使用您正在使用的 DBMS 标记 SQL 请求。 -
@ThorstenKettner 我添加了它返回的输出和查询应该执行的输出。发的时候忘记加了,希望对你有帮助。
标签: sql group-by max aggregate-functions