我上一篇文章已关闭。按年购买SQL总量
在AdventureWorks2012数据库,我不得不写使用Purchasing.PurchaseOrderDetail表的查询,并在2006年和标签和作为TotatQtyPurchased列出购买的每个产品的总控管数量。我也必须按ProductID进行分组。
这是我最新的查询
SELECT POD.ProductID, POD.ModifiedDate,
SUM(OrderQty) AS TotalQtyPurchased
FROM Purchasing.PurchaseOrderDetail POD
GROUP BY POD.ProductID
HAVING ModifiedDate = '2006'
但我得到这个错误。
列'Purchasing.PurchaseOrderDetail.ModifiedDate'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。
这很令人沮丧。
更新:当我试图指定为我查询的日期“2006”,我总是得到一个空白的执行(即没有行或列)每当我键入以下命令:
WHERE ModifiedDate LIKE“2006年%” 或 WHERE ModifiedDate =‘2006’
的错误信息是非常明确的。您必须在列列表中包含'POD.ModifiedDate',因为它不是聚合列的一部分(使用'SUM','AVG','MIN'或'MAX'获得的列)。在这里搜索确切的错误消息“列在having子句中是无效的”将会找到许多关于如何解决它的例子和解释。你应该始终做的第一件事是搜索错误消息;几率非常高,你不是第一个看到它的人(或者在这里问一下)。 –
当你有一个聚合函数(Sum)的查询时,你需要''按''分组',除非它还有一个聚合函数。因此,您还需要通过ModifiedDate进行分组,它看起来像是 – Acantud
小问题,但您确定要使用ModifiedDate,而不是OrderDate或ShipDate? – sgmoore