【发布时间】:2013-12-10 17:22:49
【问题描述】:
我的上一篇文章已关闭。
在 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'
但我收到此错误。
HAVING 子句中的“Purchasing.PurchaseOrderDetail.ModifiedDate”列无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中。
这很令人沮丧。
更新:当我尝试为我的查询指定日期“2006”时,每当我输入以下命令时,我总是得到一个空白执行(即没有行或列):
WHERE ModifiedDate LIKE '2006%' 或者 WHERE ModifiedDate = '2006'
【问题讨论】:
-
错误信息很清楚。您必须在列列表中包含
POD.ModifiedDate,因为它不是聚合列的一部分(通过SUM、AVG、MIN或MAX获得)。在此处搜索确切的错误消息“Column is invalid in the having 子句”会发现许多示例和有关如何修复它的说明。您应该始终做的第一件事是搜索错误消息;很有可能你不是第一个看到它的人(或在这里询问)。 -
当您使用聚合函数 (Sum) 进行查询时,您需要对返回的每个字段进行“分组”,除非它也是聚合函数。所以你也需要按 ModifiedDate 分组,看起来像
-
次要问题,但您确定要使用 ModifiedDate,而不是 OrderDate 或 ShipDate?
-
我想使用 OrderDate
标签: sql sql-server group-by