2017-10-13 83 views
0

如何使以下查询/子查询工作..?其目的是计算订单的重量。该查询将被用作其他人的子查询,并加入发票号码。如果可能,我想在不使用SQL中的子查询/子查询的情况下进行此项工作。如何在Access 2007中创建一个计算列的子查询..?

为了清楚起见,我应该声明这个查询是在一个Access 2007中的“实用程序前端”中创建的,它是在我通过损耗继承的IBM iSeries DB2 SQL服务器上为旧的和凌乱的AS400订单管理系统创建的,但是这些细节可能与问题无关。

此查询的开发版本完美地与硬编码到它的一个发票号:

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; 

但是,如下图所示,当我移动从何处选择,保存它,把它放到另一张发票号码查询并将其加入发票号码中,则会导致以下错误:“您试图执行不包含指定表达式'InvNum'作为聚合函数一部分的查询。”我明白这意味着什么,但我不知道该怎么办才好:

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; 

我打过它,GOOGLE了它,然后开始阅读,但显然有一些我的一些关键概念失踪。

+1

[MS-Access - 您试图执行不包含指定聚合函数的查询]的可能副本(https:// stackoverflow。 COM /问题/ 19430500/MS-访问你试了对执行-A-查询的是 - 不 - 不包括最指定-AGG) –

回答

1

这意味着,从表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;