2012-06-14 123 views
1

使用SQL Server 2005我有一个查询从包含具有数量计算字段的捆绑包中获取子记录。查询看起来是这样的:计算字段的SQL聚合

SELECT TblB_1.fooID, 
    TblC.quantity * (TblA.quantity) AS Quantity, 
    TblB_1.name AS Name 
    FROM TblB AS TblB_1 INNER JOIN 
       TblC ON TblB_1.fooID = TblC.fooID RIGHT OUTER JOIN 
       TblB INNER JOIN 
       TblA ON TblB.fooID = TblA.fooID ON TblC.parentfooID = TblB.fooID 
    WHERE (TblB.isBundle = 1) AND (TblA.isDeleted = 0) 

我需要能够按ID分组,并获得数量字段的总和。我试着用包装和这样的量行:

SUM(TblC.quantity * (TblA.quantity)) AS Quantity, 

然后在WHERE子句后加入

GROUP BY TblB_1.fooID 

,但导致“TblB_1.name是在选择列表中,因为无效它不包含在聚合函数或GROUP BY子句中“错误。

我也试图让我的头脑为此任务使用子查询,但我无法做出这项工作,也无法在此处或在Web上找到我已能够适应的示例。谢谢 - 丹

回答

1

你很亲密,你需要由所有非聚合字段进行分组。像这样

SELECT TblB_1.fooID, 
    SUM(TblC.quantity * (TblA.quantity)) AS Quantity, 
    TblB_1.name AS Name 
FROM TblB AS TblB_1 INNER JOIN 
      TblC ON TblB_1.fooID = TblC.fooID RIGHT OUTER JOIN 
      TblB INNER JOIN 
      TblA ON TblB.fooID = TblA.fooID ON TblC.parentfooID = TblB.fooID 
WHERE (TblB.isBundle = 1) AND (TblA.isDeleted = 0) 
GROUP BY TblB_1.fooID, TblB_1.name 
+0

这样做的伎俩 - 虽然我不得不GROUP BY GROUP BY中的所有字段,以使其工作。谢谢 –