假设(假设)我继承了一个数据库,并且在此数据库中有一个表用于跟踪我的特许展位中的库存,[Purchases]
计数我购买的库存以及我的顾客制造。这远非最佳解决方案,但它是存在的,我无法改变它。加入包含SUM()函数的两个子查询时的操作错误
内[Purchases]
,有标志,以表示改变是什么(库存买或库存销售),而我可以查询该表通过SUM()
只看到购买或销售,甚至总数(每个项目,时间等)很容易。
表可能会是这个样子:
Date | Flag | ItemNum | Item Name | Quantity | Unit Price
10/19/2015 SOLD 001 SNICKERS 2 $1.00
10/19/2015 BOUGHT 001 SNICKERS 72 $0.40
10/18/2015 SOLD 034 GATORADE24OZ 3 $2.00
10/18/2015 SOLD 021 PRETZEL 1 $2.00
...
这是很容易用这些数据来工作,但如果我想看到每个条目的变化库存在一个时间框架,我可能会查询表格两次(一次为SOLD
,一次为BOUGHT
)。
SELECT
Q1.ItemNum,
Q1.QuantityIn,
Q2.QuantityOut,
(Q1.QuantityIn - Q2.QuantityOut) AS QuantityRem
FROM
(
SELECT
ItemNum,
SUM(Quantity) AS QuantityIn
FROM Purchases
WHERE Flag LIKE "BOUGHT"
GROUP BY ItemNum
)
AS Q1
LEFT JOIN
(
SELECT
ItemNum,
SUM(Quantity) AS QuantityOut
FROM Purchases
WHERE Flag LIKE "SOLD"
GROUP BY ItemNum
)
AS Q2
ON Q1.ItemNum = Q2.ItemNum
然而,这回吐Invalid Operation.
而不是所需的结果。这两个子查询都是独立工作的,如果我首先将一个子查询放入一个表中,主查询就可以工作。
当然还有其他的方法来解决这个问题,但假设在我的非假设情况下,我无法作出SOLD
量负,UNION
子查询,并采取总和事后,是我对使用临时表的唯一选择?由于某些原因,在Jet中不支持两个SUM()
子查询?在搜索解决方案时,我找不到任何东西。
你缺少','在子查询的'select's –
两个固定,良好的渔获:因此,你可以尝试沿着这些路线的东西。可悲的是,这个错误并不那么简单。 – Fritz
请注意,即使您的查询没有发生错误,它也不会处理商品被出售但未被购买的情况,并且它不能正确处理商品被购买但未被出售的情况(所以'Q2。 QuantityOut'的左连接结果将是'NULL')。 –