web-dev-qa-db-fra.com

Calcul de la somme de (quantité * prix) à partir de 2 tables différentes

J'ai deux tables comme suit

table PRODUCT

Id | Name | Price

Et une table ORDERITEM

Id | OrderId | ProductId | Quantity

Ce que j'essaie de faire est de calculer le prix du sous-total pour chaque produit (Quantité * Prix), puis RÉSUMER la valeur TOTALE pour toute la commande.

J'essaie quelque chose comme ça

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

Mais bien sûr ça ne marche pas :)

Toute aide appréciée!

EDIT: Je ne souhaite afficher que le total général de la commande, donc la somme Quantité * Prix pour chaque ligne de OrderItem. Voici quelques exemples de données.

Exemple de données

TABLE Produit

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

Table OrderItem

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

M

8
Marko

Utilisation:

  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

Notez que si oi.quantity ou p.price est null, SUM renverra NULL.

19
OMG Ponies

Je pense que cela va dans le sens de ce que vous recherchez. Il semble que vous souhaitiez voir le numéro de commande, le sous-total de chaque article de la commande et le montant total de la commande.

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

je pense que cela - y compris la valeur nulle = 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

J'ai eu le même problème que Marko et j'ai trouvé une solution comme celle-ci:

/*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

Et utilisez simplement la procédure stockée GetGrandTotal pour récupérer le total général :)

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