从2个不同的表中计算(数量*价格)的和

时间:2010-08-17 19:46:56

标签: sql sum

我有两张表如下

PRODUCT

Id | Name | Price

ORDERITEM表格

Id | OrderId | ProductId | Quantity

我要做的是,计算每个产品的小计价格(数量*价格),然后将整个订单的总价值计算为.......

我正在尝试这样的事情

SELECT Id, SUM(Quantity * (select Price from Product where Id = Id)) as qty
FROM OrderItem o
WHERE OrderId = @OrderId

但当然这不起作用:)

任何帮助表示赞赏!

编辑:我只想显示整个订单的总计,所以基本上是OrderItem中每一行的Quantity * Price的总和。这是一些示例数据。

示例数据

表格产品

Id     Name            Price  
1      Tomatoes        20.09    
4      Cucumbers       27.72    
5      Oranges         21.13    
6      Lemons          20.05
7      Apples          12.05

表格OrderItem

Id         OrderId        ProductId        Quantity
151        883            1                22
152        883            4                11
153        883            5                8
154        883            6                62

中号

5 个答案:

答案 0 :(得分:19)

使用:

  SELECT oi.orderid,
         SUM(oi.quantity * p.price) AS grand_total,
    FROM ORDERITEM oi
    JOIN PRODUCT p ON p.id = oi.productid
   WHERE oi.orderid = @OrderId
GROUP BY oi.orderid

请注意,如果oi.quantityp.price为空,则SUM将返回NULL。

答案 1 :(得分:1)

我认为这 - 包括空值= 0

 SELECT oi.id, 
         SUM(nvl(oi.quantity,0) * nvl(p.price,0)) AS total_qty 
    FROM ORDERITEM oi 
    JOIN PRODUCT p ON p.id = oi.productid 
   WHERE oi.orderid = @OrderId 
GROUP BY oi.id 

答案 2 :(得分:1)

我认为这与你所寻找的一致。您似乎希望查看订单,订单中每件商品的小计以及订单的总金额。

select o1.orderID, o1.subtotal, sum(o2.UnitPrice * o2.Quantity) as order_total from
(
    select o.orderID, o.price * o.qty as subtotal
    from product p inner join orderitem o on p.ProductID= o.productID
    where o.orderID = @OrderId
)as o1
inner join orderitem o2 on o1.OrderID = o2.OrderID
group by o1.orderID, o1.subtotal

答案 3 :(得分:0)

select orderID, sum(subtotal) as order_total from
(
    select orderID, productID, price, qty, price * qty as subtotal
    from product p inner join orderitem o on p.id = o.productID
    where o.orderID = @orderID
) t
group by orderID

答案 4 :(得分:0)

我遇到了与Marko相同的问题并遇到了这样的解决方案:

/*Create a Table*/
CREATE TABLE tableGrandTotal
(
columnGrandtotal int
)

/*Create a Stored Procedure*/
CREATE PROCEDURE GetGrandTotal
AS

/*Delete the 'tableGrandTotal' table for another usage of the stored procedure*/
DROP TABLE tableGrandTotal

/*Create a new Table which will include just one column*/
CREATE TABLE tableGrandTotal
(
columnGrandtotal int
)

/*Insert the query which returns subtotal for each orderitem row into tableGrandTotal*/
INSERT INTO tableGrandTotal
    SELECT oi.Quantity * p.Price AS columnGrandTotal
        FROM OrderItem oi
        JOIN Product p ON oi.Id = p.Id

/*And return the sum of columnGrandTotal from the newly created table*/    
SELECT SUM(columnGrandTotal) as [Grand Total]
    FROM tableGrandTotal

只需使用GetGrandTotal存储过程来检索总计:)

EXEC GetGrandTotal