查询SQL Server以找到所有订单中所有产品的总价格

3

我有一个名为Orders的表格,包含(id,orderCode,productId,quantity,color,size)等字段,其中可以有以下条目:

1,O20100812,163,2,BLUE,Medium
1,O20100812,163,3,BLUE,Larger
1,O20100812,145,4,RED,Large etc
1,O20100815,134,5,RED,Large etc
1,O20100815,143,2,BLACK,Large etc
1,O20100815,112,8,BLACK,Large etc

还有一个名为Products的表格,包括(id,名称,价格)

我想要的是查找订单号为020100812的所有产品的总价。 我应该在连接产品表时DISTINCT选择订单代码,然后SUM数量吗?

2个回答

5

为什么您需要使用distinct?

Select SUM(o.Quantity * Price) TotalPrice
FROM Orders o JOIN Products p ON (o.ProductId = p.Id)
WHERE OrderCode = '020100812'

对于所有订单,您可以使用以下查询:

Select OrderCode, SUM(o.Quantity * Price) TotalPrice
FROM Orders o JOIN Products p ON (o.ProductId = p.Id)
Group by OrderCode

我认为我需要使用DISTINCT,因为我可能会有多个O20100812、多个O20100813和多个O20100816等。 - chchrist
1
不需要指定distinct。@Michael的答案是正确的。 - IsmailS
但我需要在一个HTML表格中显示订单代码和订单的总价。使用WHERE子句,我只会显示020100812这个订单。我应该为每个订单制作一个查询吗? - chchrist
1
不,你应该在这种情况下使用GROUP BY OrderCode - Rup

1
不需要,你可以使用SUM在分组后进行聚合,例如:GROUP BY
select  O.id, O.ordercode, sum(P.price * O.quantity) as total
  from  orders O
  join  products P on P.id = O.productid
group by O.id, O.ordercode

这将显示每个订单中每个订单代码的总价格 - 如果您想要所有订单中的所有订单代码,您需要

select  O.ordercode, sum(P.price * O.quantity) as total
  from  orders O
  join  products P on P.id = O.productid
group by O.ordercode

我猜O20100812只是一个例子,你实际上想要所有订单代码都这样做吗?

即不按订单ID分组。


在另一个答案的评论中确认,是需要针对每个订单进行操作,而不仅仅是O20100812。 - Cœur
@Cœur,这就是我的答案,我想是吧?显然,我写它已经好几年了。 - Rup
是的,这就是你的答案所做的。我只是确认你的猜测是正确的。 - Cœur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接