Расчет суммы (количество * цена) из 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. Вот некоторые примеры данных.
Пример данных
ТАБЛИЦА Продукт
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
5 ответов
Использование:
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.
Я думаю это - включая нулевое значение = 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
Я думаю, что это соответствует тому, что вы ищете. Похоже, что вы хотите увидеть orderid, промежуточную сумму для каждого элемента в заказе и общую сумму для заказа.
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
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
У меня была та же проблема, что и у Марко, и я нашел решение, подобное этому:
/*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