Расчет суммы (количество * цена) из 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
Другие вопросы по тегам