2017-05-05 77 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语句?我尝试了一些变化,但在最后一行中添加的内容让我回到了在开始时的那种错误。谢谢! –