假設(假設)我繼承了一個數據庫,並且在此數據庫中有一個表用於跟蹤我的特許展位中的庫存,[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')。 –