2012-06-14 119 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中的所有字段,以使其工作。謝謝 –