【发布时间】:2011-06-21 10:51:40
【问题描述】:
我想连接三个表并计算表 A 的总和(数量)。 我尝试了一些东西,我得到了想要的输出。但是我仍然对聚合函数和 Group By 子句感到困惑。
在通过连接两个或多个表来计算总和值时,我们需要在 Group By 子句中提及哪些列,为什么需要给出这些列?
例如:这是我的表和所需的查询。
TableA: ItemID, JobOrderID, CustomerID, DivisionID, Quantity
TableB: ItemID, ItemName, SpecificationID
TableC: SpecificationID, SpecificationName
TableD: DivisionID, DivisionName
TableE: JobOrderID, JobOrderNo.
TableF: CustomerID, CustomerName
我想获得基于ItemID、CustomerID、JobOrderID 和DivisionID 的总和(数量)。
我编写了以下查询,它工作正常。但是,如果我删除 Group By 子句中的任何列,它不会给出预期的结果。为什么? Group By 子句在这里做什么?使用聚合函数时如何指定 Group By 子句?这是我的查询。
SELECT
B.ItemName + ' - ' + C.SpecificationName AS 'ItemName',
SUM(A.Quantity) AS 'Quantity',
A.ItemID,
D.DivisionName,
F.CustomerName,
E.JobOrderNo,
A.DivisionID,
A.JobOrderID,
A.CustomerID
FROM
TableA A
INNER JOIN TableB B ON B.ItemID = A.ItemID
INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID
INNER JOIN TableD D ON D.DivisionID = A.DivisionID
LEFT JOIN TableE E ON E.JobOrderID = A.JobOrderID
LEFT JOIN TableF F ON F.CustomerID = A.CustomerID
WHERE
A.ItemID = @ItemID
GROUP BY
A.ItemID,
A.JobOrderID,
A.DivisionID,
A.CustomerID,
D.DivisionName,
F.CustomerName,
E.JobOrderNo,
B.ItemName,
C.SpecificationName
任何人都请以此为例对 Group By Clause 提出建议。
【问题讨论】:
标签: sql sql-server sql-server-2005 group-by aggregate-functions