使用来自另一个表的结果进行SQL更新

使用来自另一个表的结果进行SQL更新,sql,sql-server,Sql,Sql Server,我想用以下查询更新表products上的qty字段。 此查询将在“数量”字段中返回所需的数字 SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - SUM(g.Qty)) Qty FROM Products_Invoices e JOIN ( SELECT product_number, SUM(qty) Qty FROM SoldItemsCalc GROUP BY product_number ) g ON e.Pr

我想用以下查询更新表products上的qty字段。 此查询将在“数量”字段中返回所需的数字

SELECT e.Prod_name, e.Prod_number,
  (SUM(e.Qty) - SUM(g.Qty)) Qty
FROM Products_Invoices e JOIN (
    SELECT product_number, SUM(qty) Qty
    FROM SoldItemsCalc
    GROUP BY product_number
  ) g ON e.Prod_number = g.product_number
GROUP BY Prod_number, Prod_name
order by Prod_name
如何使用此查询并更新产品编号匹配的值

我不介意你改变这个问题。。。只需要更新数量值

谢谢

我这样做:

with toupdate as (
    SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - SUM(g.Qty)) Qty
    FROM Products_Invoices e JOIN (
         SELECT product_number, SUM(qty) Qty
         FROM SoldItemsCalc
         GROUP BY product_number
        ) g ON e.Prod_number = g.product_number
    GROUP BY Prod_number, Prod_name
   )
update t
    set qty = toupdate.qty
    from toupdate
    where t.prod_nubmer = toupdate.prod_number

你确定你的数量能产生你想要的结果吗?您在子查询中进行求和,然后在外部查询中进行另一个求和。这可能会把你的数字弄乱。这里是@Gordon的好答案的一个细微变化——这是使用我认为您想要的数量更新产品表:

with toupdate as (
    SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - g.Qty) Qty
    FROM Products_Invoices e JOIN (
         SELECT product_number, SUM(qty) Qty
         FROM SoldItemsCalc
         GROUP BY product_number
        ) g ON e.Prod_number = g.product_number
    GROUP BY Prod_number, Prod_name, g.Qty
   )
update p
    set qty = t.qty
    from products p join toupdate t on p.prod_number = t.prod_number;
下面是一个例子:

产品发票表中有2条记录,总计150。SoldItemCalc表中有2条记录,总计25条。使用您的查询,当我想象您想要125时,总体结果将更改为100

顺便说一句——使用上述CTE将适用于SQLServer2005及更高版本。如果需要支持SQL Server 2000,请使用以下版本:

update p
    set qty = t.qty
    from products p join (
      SELECT e.Prod_name, e.Prod_number, (SUM(e.Qty) - g.Qty) Qty
      FROM Products_Invoices e JOIN (
         SELECT product_number, SUM(qty) Qty
         FROM SoldItemsCalc
         GROUP BY product_number
        ) g ON e.Prod_number = g.product_number
    GROUP BY Prod_number, Prod_name, g.Qty) t on p.prod_number = t.prod_number;

我也得到了与你的查询相同的结果。。。我仔细检查了我的结果,结果似乎很好。。。感谢you@Barlet好吧,但要小心——看看这把小提琴,了解我的意思:——祝你好运@Barlet——基本上,如果Products\u Invoices表中有多条记录具有相同的prod\u编号,那么SoldItemCalc表的总和将是错误的(另一个表中记录数的乘数)。如果您的查询返回您想要的内容,则无需担心--只是想让您知道:)