2017-05-18 65 views
1

更新我在SAM_Updates表中的下列信息如何同一行多次與SQL

37-529-1 1 
13793-1 1 
42086-1 1 
13793-1 1 

我運行此查詢以更新另一個表(部分)的數量值,其中自定義標籤的匹配。

update Parts 
set Parts.Quantity = cast(cast(Parts.quantity as int) - 
cast(SAMS_Updates.quantity as int) as varchar(100)) 
from SAMS_Updates 
where Parts.SAMS_Custom_Label = SAMS_Updates.Custom_Label 

我遇到的問題是價值13793.它只是更新從數量減去一。我希望它最終減去兩個,因爲有兩個單獨的行。

任何想法爲什麼會發生這種情況?我正在使用SQL Server Express。

+0

爲什麼要將數量轉換爲varchar? –

+0

當我批量插入我需要使它varchar,因爲數據很奇怪。我可以進去刪除那些,只是將列轉換爲int。 –

回答

3

您可以使用加入到聚合了QuantitySAM_Updates子查詢:

update p 
    set p.Quantity = p.Quantity - su.Quantity 
from parts p 
    inner join (
    select Custom_Label, sum(cast(Quantity as int)) as Quantity 
    from SAMS_Updates 
    group by Custom_Label 
    ) su 
    on p.SAMS_Custom_Label = su.Custom_Label 

rextester演示:http://rextester.com/RTUE81736

假設每個部分都10 Quantity的更新之前,這將返回:

+-------------------+----------+ 
| SAMS_Custom_Label | Quantity | 
+-------------------+----------+ 
| 37-529-1   |  9 | 
| 13793-1   |  8 | 
| 42086-1   |  9 | 
+-------------------+----------+ 
+0

SqlZim你的解決方案是正確的。但爲什麼聯結沒有發現兩行加入和更新? –

+0

@benjaminmoskovits由於萬聖節保護:[萬聖節保護 - 完整系列 - 保羅白](http://sqlblog.com/blogs/paul_white/archive/2013/02/21/halloween-protection-the-complete-series。 aspx) – SqlZim

+0

非常感謝。我記得有關它的消息,但我必須通過Paul White的系列作品。 –