2013-02-20 66 views
2

我想用以下查询更新我的表产品上的数量字段。 此查询将数字字段中的所需数字返回给我。来自另一个表的结果的SQL更新

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 

如何使用这个查询和更新数据,而且product_number匹配

如果你改变了查询,我不介意......只需要更新的数量值

谢谢你

回答

2

我做这种方式:

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 
+0

谢谢......这个工作,因为我想...... – Barlet 2013-02-20 15:14:30

1

你确定你的数量为p产生你想要的结果?您在子查询中执行SUM,然后在外部查询中执行另一个SUM。这可能会把你的数字搞乱。下面是@戈登很好的回答略有变化 - 这是使用数量,我认为您在更新产品表想:

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; 

这里是与示例中的小提琴:http://www.sqlfiddle.com/#!3/42c80/1

有2记录在Product_Invoices表中,其中SUM为150.并且在SoldItemsCalc表中有2条记录总和为25.使用您的查询,当我想象你想要125时,整体结果变为100.

顺便说一句 - 使用上面的CTE将适用于SQL Server 2005及更高版本。如果你需要支持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; 
+0

我与您的查询相同的结果太... 我仔细检查了我的结果,他们似乎很好......谢谢 – Barlet 2013-02-20 15:23:45

+0

@Barlet - 好吧,但要小心 - 看到这个小提琴的意思是:http://www.sqlfiddle.com/#!3/0cc74/1 - 祝你好运! – sgeddes 2013-02-20 15:26:10

+0

@Barlet - 基本上,如果您的Products_Invoices表中有多个具有相同prod_number的单个记录,那么您将累计SoldItemsCalc表错误(另一个表中的记录数乘数)。不用担心,但如果你的查询返回你想要的 - 只是想让你知道:) – sgeddes 2013-02-20 15:29:12