2013-12-10 31 views
0

我上一篇文章已关闭。按年购买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’

+0

的错误信息是非常明确的。您必须在列列表中包含'POD.ModifiedDate',因为它不是聚合列的一部分(使用'SUM','AVG','MIN'或'MAX'获得的列)。在这里搜索确切的错误消息“列在having子句中是无效的”将会找到许多关于如何解决它的例子和解释。你应该始终做的第一件事是搜索错误消息;几率非常高,你不是第一个看到它的人(或者在这里问一下)。 –

+0

当你有一个聚合函数(Sum)的查询时,你需要''按''分组',除非它还有一个聚合函数。因此,您还需要通过ModifiedDate进行分组,它看起来像是 – Acantud

+0

小问题,但您确定要使用ModifiedDate,而不是OrderDate或ShipDate? – sgmoore

回答

4

你接近,而且大多数SQL的错误信息告诉你到底是什么错误,它需要一些练习来加以解释。

  • 取出HAVING子句现在...

  • 做一点研究的WHERE子句,弄清楚如何在WHERE
    可以用来代替具有...

由于这是功课,我不想给你答案,但是这应该得到了正确的方向

0

如果你是全光照g条款中的任何内容,都需要使用aggreagte函数。例如, 您可以使用类似这样的

HAVING MAX(MODIFIEDDATE) = '2006' 

但是从你的问题,它看起来像,WHERE子句将解决你的问题best.If上面的查询结果集是你需要的话,

SELECT POD.ProductID, MODIFIEDDATE, SUM(OrderQty) AS TotalQtyPurchased 
     FROM Purchasing.PurchaseOrderDetail POD 
     WHERE ModifiedDate = '2006' 
     GROUP BY POD.ProductID, MODIFIEDDATE 

我做了编辑,我会建议的是,因为您在WHERE子句中使用了修改日期,所以不需要在SELECT子句中指定它。

+0

我不断收到此错误消息:列'Purchasing.PurchaseOrderDetail.ModifiedDate'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。在一个相关的问题上,我做了一个类似的查询并设法成功执行它:SELECT POD.ProductID,POD.ModifiedDate, SUM(OrderQty)AS TotalQtyPurchased FROM Purchasing.PurchaseOrderDetail POD GROUP BY POD.ProductID,POD.ModifiedDate ORDER BY ModifiedDate ASC – user3047713

+0

将给出相同的错误,因为您仍然在Select语句中有ModifiedDate,但是不在 – sgmoore

+0

@sgmoore谢谢忽视这一点。现在修改 – Santhosh

0

编辑现在

试试这个

SELECT POD.ProductID, POD.ModifiedDate, SUM(Order_qty) 
AS TotalQtyPurchased FROM Purchasing.PurchaseOrderDetail POD where ModifiedDate = '2006' GROUP BY 
POD.ProductID 
+0

不起作用。消息208,级别16,状态1,行1 无效的对象名称'PurchaseOrderDetail'。 – user3047713

+0

我编辑了答案。现在检查 – Grish