我有两张桌子。工作和零件。一项工作可以有很多部分。
我想列出所有作业,然后用一列显示该作业的各个部分的总和。
我的代码(在 Firebird 中)如下。我刚刚收到错误 - 选择列表中的表达式无效(不包含在聚合函数或 GROUP BY 子句中)。
谢谢你。
SELECT J.ID, J.REF, J.CUST, J.DATEADDED, Sum(P.QTYREQ)
FROM JOBS J
Join PARTS P
on J.ID = P.JOBID
Group by J.ID
当您将 SUM() 与其他元素一起放入“选择”部分时,您需要指定所有非聚合元素的分组方式。所以:
SELECT J.ID, J.REF, J.CUST, J.DATEADDED, SUM(P.QTYREQ) AS TotalParts
FROM JOBS J
JOIN PARTS P ON J.ID = P.JOBID
GROUP BY J.ID, J.REF, J.CUST, J.DATEADDED;
了解当您使用聚合函数(如
SUM
)时,您需要在 GROUP BY
子句中包含所有非聚合列,这一点很有用。在您的情况下,SELECT
列表中且未聚合的所有列都需要成为GROUP BY
子句的一部分,如下所述:
SELECT J.ID, J.REF, J.CUST, J.DATEADDED,SUM(P.QTYREQ) AS TotalParts
FROM JOBS J
JOIN PARTS P
ON J.ID = P.JOBID
GROUP BY J.ID, J.REF, J.CUST, J.DATEADDED
这将确保所有不属于
SUM
函数的列都包含在 GROUP BY
子句中。希望这能解决您的问题。
选择列表中的列应作为
group by
或 aggregatefunction
的一部分。阅读此处以更好地理解https://www.sqlshack.com/an-overview-of-the-sql-group-by-clause/