Sql 创建存储过程时遇到的问题

Sql 创建存储过程时遇到的问题,sql,sql-server,Sql,Sql Server,我有两个表Product和OrderItem,如屏幕截图所示 我想创建一个存储过程,用从该特定产品的所有销售中收集的金额更新Product表的TotalSale列 要填充TotalSale列,我必须通过乘以单价和数量列,逐行多次计算OrderItem中同一产品的总金额,然后再次将这些多个每个产品的总金额相加,以获得每个产品的总销售额。我是个初学者,搞不懂 我在OrderItem中添加了一列: 然后,我计算出每种产品的总销售额,得到每种产品的总销售额: SELECT SUM(TotalS

我有两个表Product和OrderItem,如屏幕截图所示

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

要填充TotalSale列,我必须通过乘以单价和数量列,逐行多次计算OrderItem中同一产品的总金额,然后再次将这些多个每个产品的总金额相加,以获得每个产品的总销售额。我是个初学者,搞不懂

我在OrderItem中添加了一列:

然后,我计算出每种产品的总销售额,得到每种产品的总销售额:

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

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

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

  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

根据您的屏幕截图,我认为以下查询适用于您:

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

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

请提供相关表格的结构。另外,请提供一个简单的例子,插入您需要的数据和预期的结果。似乎您忘记了包含该屏幕截图,但是,请不要。提供表的详细信息时,请将其作为DDL语句提供。如果您正在提供数据,那么就为这些表提供DML语句,这些表就是您提供DDL语句的表。数据图像对那些向你寻求帮助的人没有帮助;使你的问题不太可能得到答案。另外,请务必包含您试图创建所需SP的完整SQL语句,并解释为什么它不起作用。谢谢。我一直在写insert语句:insert into Product TotalSale select sumUnitPrice*ORDERBITEM group by ProductId的数量不知道如何写。我知道我想做什么,但如何做是我陷入困境的地方。如何用计算的totl值填充该列在SQL表中存储计算结果通常违反所有规范化规则。。因此,您可以创建一个视图,在其中计算并查询视图。。或者使用CTE与。。。像queryUse COALESCE与IFNULL具有相同的结构,因此您可以获得跨数据库供应商的支持,因为COALESCE是ANSII SQL
UPDATE Product
SET TotalSale = COALESCE(
    (SELECT SUM(TotalSale) 
    FROM OrderItem 
    WHERE OrderItem.ProductID = Product.ProductID), 0)