2017-05-05 53 views
1

我正在尋找在SQL表上執行總計計算,以查找針對特定銷售人員持有的特定庫存物品的數量直至幷包括特定日期。SQL總和,多個分組依據和日期條件

我能夠執行求和功能,以便在銷售人員/項目的基礎上查找數量,只要我不考慮日期範圍條件,但只要我添加該方面,它就會有點梨形!這是我到目前爲止的代碼:

SELECT Salesperson, Item No, Sum(Quantity) AS 'Quantity' 
FROM dbo 
WHERE (Location Code='VAN') 
GROUP BY Salesperson, Item No, 
HAVING (Registering Date<={ts '2017-05-03 00:00:00'}) 

位置代碼=需要VAN過濾器,以確保它忽略了倉庫quantities.My SQL知識是有限的,以我在工作中碰到的少數幾個例子,我的交互主要是基於通過Excel中的Microsoft Query。在查看上面的代碼時,我發現'註冊日期'條件應該在'WHERE'部分,但是當我使用Microsoft Query中提供的選項添加條件時,它會創建'HAVING'行。

如果任何人都可以提供任何指針,將不勝感激!

乾杯

彼得

+1

您能否提供您所得到的例外信息? – War

+0

您在GROUP BY末尾有一個逗號,'Item No'在GROUP BY中無效,可能並不是您在SELECT中想要的。 –

+0

War- 當我執行查詢時,沒有異常信息或提示顯示 - 它似乎運行良好,但顯示的數量與我檢查計算的手動總和不匹配。 Gordon Linoff - 由於當前數據的字符串長度,此處使用的列名稍有變化。在我的數據庫中,'Item No'的列是Item_No –

回答

1

我會想象一個這樣的查詢:

SELECT Salesperson, [Item No], Sum(Quantity) AS Quantity 
--------------------^ escape the non-standard column name 
FROM dbo.?? 
---------^ table name goes here 
WHERE Location Code = 'VAN' AND 
     [Registering Date] <= '2017-05-03' 
------^ put the filtering condition in the correct clause 
GROUP BY Salesperson, Item No 
-----------------------------^ remove the comma 

你的代碼,寫的,有多個錯誤。我猜測大多數是轉錄錯誤,而不是原始查詢(例如,如果FROM中沒有給出表格,查詢就不會運行)。然後,「主要」錯誤將在HAVING子句中進行篩選,而不是在WHERE子句中進行篩選。

+0

非常感謝Gordon,這爲我解決了它。我懷疑它是與「HAVING」系列有關的 - 我從未見過這種說法,直到現在。出於某種原因,在Microsoft Query中應用不同的條件時,它將位置代碼1放入WHERE語句中,並將註冊日期條件放入HAVING語句中。 –

+0

如果我想過濾結果數量,只顯示數量大於0的Salesperson/Item的實例,那麼我是否使用HAVING語句?我嘗試了一些變化,但在最後一行中添加的內容讓我回到了在開始時的那種錯誤。謝謝! –