2016-01-08 169 views
0

的價值增加量我有兩個表每個匹配的記錄

TableA: 
ID Amount 
1 100 

TableB: 
ID Interest 
1 10 
1 20 

我想增加每個匹配記錄的TableB中關心的TableA.Amount。如何爲此編寫更新聲明?我在下面嘗試過,但它只更新第一個匹配記錄的金額。

UPDATE a 
SET a.Amount = a.Amount + b.Intereset 
FROM TableA a JOIN TableB b ON a.ID = b.ID 

這是我得到的結果是:

TableA: 
ID Amount 
1 110 

然而,預期的結果是:

TableA: 
ID Amount 
1 130 

回答

3

試試這個

Correlated sub-query

UPDATE TableA 
SET Amount = Amount + ISNULL((SELECT sum(b.Intereset) 
           FROM TableB b     
           WHERE TableA.ID = b.ID),0) 

或使用Cross Apply

UPDATE a 
SET amount = amount + total_interest 
FROM tablea a 
     CROSS apply (SELECT Sum(b.intereset) 
        FROM tableb b 
        WHERE a.id = b.id) cs (total_interest) 
+1

這是一個很好的答案...雖然我'd一定要適當地處理NULL值,否則如果TableB中不存在NULL,那麼TableA中最終會得到NULL值 – JamieD77

+0

如果您只包裝要添加的值(第一個示例中的select語句和第二個示例中的'total_interest' )與'ISNULL',那麼它將全部設置。 – gmm

+0

@ JamieD77 - 耶更新了。錯過了那個點 –

1

如果您擔心不匹配的值,那麼最好的解決方法是使用一個FROM條款:

UPDATE a 
    SET Amount = a.Amount + b.SumInterest 
    FROM TableA a JOIN 
     (SELECT SUM(b.interest) as SumInterest 
      FROM TableB b 
      GROUP BY b.id 
     ) b 
     ON a.id = b.id;