我的上一篇文章已经结束。
在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'
答案 0 :(得分:4)
你很接近,并且大多数SQL错误消息都告诉你错误是什么,需要一些练习来解释它们。
现在取出HAVING条款......
对WHERE子句进行一些研究,弄清楚WHERE如何 可以用来代替HAVING ......
由于这是作业,我不想给你答案,但这应该是正确的方向
答案 1 :(得分:0)
如果您在使用条款中使用任何内容,则需要使用aggreagte函数。例如, 你可以像这样使用
HAVING MAX(MODIFIEDDATE) = '2006'
但从你的问题来看,WHERE子句最能解决你的问题。如果你需要上面的查询结果集,那么,
SELECT POD.ProductID, MODIFIEDDATE, SUM(OrderQty) AS TotalQtyPurchased
FROM Purchasing.PurchaseOrderDetail POD
WHERE ModifiedDate = '2006'
GROUP BY POD.ProductID, MODIFIEDDATE
我做了编辑,我建议的是,因为你在WHERE子句中使用修改日期,所以你不需要在SELECT子句中指定它。
答案 2 :(得分:0)
现在编辑
试试这个
SELECT POD.ProductID, POD.ModifiedDate, SUM(Order_qty)
AS TotalQtyPurchased FROM Purchasing.PurchaseOrderDetail POD where ModifiedDate = '2006' GROUP BY
POD.ProductID