web-dev-qa-db-ja.com

2つの異なるテーブルからの(数量*価格)の合計の計算

次の2つのテーブルがあります

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

M

8
Marko

使用する:

  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.quantityまたはp.priceがnullの場合、SUMはNULLを返します。

19
OMG Ponies

これはあなたが探しているものに沿っていると思います。注文ID、注文の各アイテムの小計、注文の合計金額を確認したいようです。

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
1
Matt M

私はこれを考える-null値を含む= 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 
1
Randy

私はマルコと同じ問題を抱えていて、このような解決策に出会いました:

/*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
0
Alican Dönmez
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
0
Beth