如何创建一个子查询来对 Access 2007 中的计算列求和..?

How do I create a subquery that sums a calculated column in Access 2007..?

如何使以下 query/subquery 工作..?其目的是计算订单的重量。然后该查询将用作其他查询的子查询,并加入发票编号。如果可能的话,我想在 SQL.

中不使用 subquery/subselect 来完成这项工作

为清楚起见,我应该声明此查询是在我为 IBM iSeries DB2 SQL 服务器上的旧且混乱的 AS400 订单管理系统创建的 Access 2007 "utility frontend" 中进行的通过减员继承,但这些细节可能与问题无关。

此开发版本的查询与硬编码到其中的发票编号完美配合:

SELECT Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item
WHERE OrdersThisWeek.InvNum=557618 AND OrdersThisWeek.Qty>0 AND Products.Wgt>0;

但如下所示,当我将发票编号从 WHERE 移动到 SELECT、保存它、将其放入另一个查询并将其加入发票编号时,会导致以下错误:"You tried to execute a query that does not include the specified expression 'InvNum' as part of an aggregate function.".我明白这意味着什么,但我不知道该怎么办:

SELECT OrdersThisWeek.InvNum, Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item
WHERE OrdersThisWeek.Qty>0 AND Products.Wgt>0;

我玩过它,用谷歌搜索过它,并阅读过它,但显然我遗漏了一些关键概念。

这意味着,从 table OrdersThisWeek 开始,如果您想计算发票号 557618 上的商品的重量,您将得到如下结果:

 InvNum     InvWgt
 ------     ------
 557618     42

但是如果您不指定发票编号,SQL 就不知道如何对结果进行分组。您是否只想从每个订单的重量中拿出一大笔钱?可能不会。你想在你的声明中使用 'GROUP BY' 这样的:

SELECT OrdersThisWeek.InvNum, Sum([OrdersThisWeek].[Qty]*[Products].[Wgt]) AS InvWgt
FROM Products INNER JOIN OrdersThisWeek ON Products.Item = OrdersThisWeek.Item
WHERE OrdersThisWeek.Qty>0 AND Products.Wgt>0
GROUP BY OrdersThisWeek.InvNum;