面对创建存储过程的麻烦

时间:2018-12-26 16:00:39

标签: sql sql-server

tables

我有两个表ProductOrderItem,如屏幕快照所示。

我想创建一个存储过程,以使用从该特定产品的所有销售中收取的金额更新TotalSale表的Product列。

要填充TotalSale列,我必须乘以OrderItemUnitPrice列,然后对Quantity的同一产品逐行多次计算总金额再次必须将每种产品的总金额相加才能获得每种产品的销售总额。我是一个初学者,在弄清楚它时遇到了麻烦。

我在OrderItem中添加了一列:

ALTER TABLE OrderItem 
    ADD TotalSale DECIMAL NULL

UPDATE dbo.OrderItem 
SET TotalSale = UnitPrice * Quantity

然后我计算出每种产品的多个总金额的总和,以得出每种产品的总销售额:

SELECT 
    SUM(TotalSale) AS Gross 
FROM 
    OrderItem 
GROUP BY 
    ProductId

现在,作为一个初学者,我不知道如何用计算出的总值填充该列。任何提示或帮助,将不胜感激!

2 个答案:

答案 0 :(得分:1)

一开始您对问题的描述有点难以理解,我会尽力帮助您,我相信您可以做到:

  With MyCTE AS
    ( SELECT SUM(TSale) AS TotalSaleOI
       FROM OrderItem GROUP BY ProductId
    )
UPDATE P
SET TotalSale = C.TotalSaleOI
FROM Product AS P
INNER JOIN MyCTE AS C ON P.ProductId = C.ProductoId

答案 1 :(得分:0)

根据您的屏幕截图,我认为以下查询将为您工作:

UPDATE Product
SET TotalSale = COALESCE(
    (SELECT SUM(TotalSale) 
    FROM OrderItem 
    WHERE OrderItem.ProductID = Product.ProductID), 0)

ISNULL子句将确保如果没有该产品的订单,它将计算结果为0。

相关问题