【问题标题】:SQL Server query to find the total price of all the products by orderSQL Server 查询按订单查找所有产品的总价
【发布时间】:2011-03-28 19:44:17
【问题描述】:

我有一张带有(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,name,price)

我想要的是在orderCode 020100812的订单中找到所有产品的总价格。我应该在加入产品表时选择DISTINCT选择订单代码然后对数量求和吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    为什么需要不同的?

    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 等
    • 不,您不需要指定 distinct。 @Michael 的回答是正确的。
    • 但我需要在 html 表格中显示 orderCode 和订单的总价。使用 WHERE 我将只显示 020100812。我应该为每个订单进行查询吗?
    • 不,在这种情况下你应该GROUP BY OrderCode
    【解决方案2】:

    不,GROUP BY,然后您可以使用 SUM 在整个组中聚合,例如

    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
    

    即不要在订单 ID 中分组。

    (我猜 O20100812 只是一个示例,您实际上希望所有订单代码都使用这个?)

    【讨论】:

    • 在另一个答案的评论中确认,是的,每个订单都需要它,而不仅仅是 O20100812。
    • @Cœur 这就是我的回答,我想?显然是几年前我写的。
    • 是的,这就是您的答案。我只是在确认你的审讯是正确的猜测。
    猜你喜欢
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多