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
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.
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
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
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
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