按年购买的SQL总数量

时间:2013-12-10 17:22:49

标签: sql sql-server group-by

我的上一篇文章已经结束。

在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'

3 个答案:

答案 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
相关问题