2013-02-20 88 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

相關問題