在另一列上使用sum时选择不同的id?

时间:2009-05-08 09:43:49

标签: sql

订单可以包含多行,因此OrderId不是唯一的。我如何进行SUM而不必使用GROUP BY才能正确解析SQL?

SELECT DISTINCT OrderId, SUM(ProductPrice * ProductQuantity ) as Total
FROM OrderDetails
GROUP BY OrderId

如果我取消GROUP BY线,那么我得到

'OrderDetails.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

修改

我希望的结果是,如果一个订单由2个产品组成,那么它应该输出两行。

group by输出1行。

3 个答案:

答案 0 :(得分:2)

你不需要明确的。
当用额外的列进行求和/计数时,你必须有一个组 您将获得每组订单的总计。

所以
1-20.00
1-30.00
2-10.00

会得到 1-50.00
2-10.00

答案 1 :(得分:0)

你没有订单表吗?

通常订单包含订单和详细信息(订单行),因此您应该与主表进行联接。这应该有用。

SELECT O.OrderID,  SUM(Od.ProductPrice * OD.ProductQuantity ) as Total
FROM Orders AS O INNER JOIN OrderDetails AS OD ON O.orderID = OD.OrderID
group by O.OrderID

答案 2 :(得分:0)

如果您选择非聚合列(在本例中为OrderID)和聚合列(SUM(xxx)),则您必须在非聚合列上进行分组... < / p>

但是当你分组时,那么OrderID将会是不同的,因为它会将每个orderID的所有其他值组合在一起。