Access VBA How to use a Union ALL statement
我的工会声明没有像我希望的那样返回。我将把产品放在一个位置(73),并将它们从同一位置取出。我想知道那个地方还有多少人。我想把这个数加起来,再减去这个数。我将我的交易存储在tblwarehousetransfer中。我想每种产品都有一行,总共是多少。我得到的是一行加上放入位置的数量之和,一行加上取出的数量之和(负数)。我正在使用列表框显示我所有产品的列表。
1 2 3 4 5 6 7 8 | Me.lstCutWipers.RowSource ="SELECT tblProducts.ProductID, tblProducts.ProductName, Sum(tblWarehouseTransfer.Qty) AS SumOfQty" _ &" FROM tblWarehouseTransfer INNER JOIN tblProducts ON tblWarehouseTransfer.ProductID = tblProducts.ProductID" _ &" GROUP BY tblProducts.Productid, tblProducts.ProductName, tblWarehouseTransfer.LocationTo" _ &" HAVING (((tblWarehouseTransfer.LocationTo) = 73))" _ &" UNION ALL SELECT tblProducts.ProductID, tblProducts.ProductName, -Sum(tblWarehouseTransfer.Qty) AS SumOfQty" _ &" FROM tblWarehouseTransfer INNER JOIN tblProducts ON tblWarehouseTransfer.ProductID = tblProducts.ProductID" _ &" GROUP BY tblProducts.Productid, tblProducts.ProductName, tblWarehouseTransfer.LocationFrom" _ &" HAVING (((tblWarehouseTransfer.LocationFrom)= 73))" |
有人能帮我把"进"和"出"加在一起吗?
此示例联接两个子查询,这允许将两个不同的和添加到一起,而联合只将两个查询的行一起列出。
子查询的一个缺点是它不能在查询设计视图中完全编辑…它需要SQL视图来编辑整个事件。但是,您可以分别保存每个子查询,然后将这些查询连接到第三个查询中。然后可以在设计视图中分别编辑每个零件。
还要注意,我把HAVING子句改成了WHERE子句。如果在对源值进行聚合(即分组和求和)之前对它们应用条件,那么WHERE子句的效率会更高。在聚合数据后应用条件。如果条件涉及聚合表达式,那么它们必须出现在HAVING子句中。
通过改为WHERE子句,它还意味着您不必在该字段上分组。速度的差异可以忽略不计,它应该返回相同的信息,但这是不必要的,因为对该查询有贡献的每一行都将只针对WHERE子句中的值。请注意,如果您完全更改了查询,则需要考虑应用条件的适当子句。
编辑:更改为左联接,并在totalsum中处理了空值,并调用nz()。
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT ToQuery.ProductID, ToQuery.ProductName, (ToQuery.SumOfQty + nz(FromQuery.SumOfQty, 0.0)) As TotalSum FROM (SELECT tblProducts.ProductID, tblProducts.ProductName, Sum(tblWarehouseTransfer.Qty) AS SumOfQty FROM tblWarehouseTransfer INNER JOIN tblProducts ON tblWarehouseTransfer.ProductID = tblProducts.ProductID WHERE tblWarehouseTransfer.LocationTo = 73 GROUP BY tblProducts.Productid, tblProducts.ProductName) AS ToQuery LEFT JOIN (SELECT tblProducts.ProductID, tblProducts.ProductName, -Sum(tblWarehouseTransfer.Qty) AS SumOfQty FROM tblWarehouseTransfer INNER JOIN tblProducts ON tblWarehouseTransfer.ProductID = tblProducts.ProductID WHERE tblWarehouseTransfer.LocationFrom = 73 GROUP BY tblProducts.Productid, tblProducts.ProductName) AS FromQuery ON ToQuery.ProductID = FromQuery.ProductID |
要完成此操作,假定productID是主键,并且productID对每个productID都是唯一的。如果不是这样,则还需要更改表达式的外部查询以匹配产品名称值(即添加