如何使以下查询/子查询工作..?其目的是计算订单的重量。然后,该查询将用作其他查询中的子查询,并加入发票编号。如果可能的话,我想在不使用SQL中的子查询/子选择的情况下完成这项工作。
为了清楚起见,我应该声明这个查询是在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;
但是如下所示,当我将发票编号从WHERE移动到SELECT时,保存它,将其放入另一个查询,并将其加入发票编号,它会导致以下错误:“您试图执行一个查询不包括指定的表达式'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;
我玩过它,谷歌搜索它,并阅读它,但显然我有一些关键概念,我不知道。
答案 0 :(得分: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;