SQL Update表基于单独表中的条件

时间:2016-03-15 16:41:44

标签: sql sql-server sql-update where multiple-tables

我有两张桌子,每张桌子都有数千张已经支付或欠款的保证金记录。格式如下:

Table A
ID   ID2    ID3   Payment
1    REG    P     102.5
2    REG          120
3    REG    P     65.5

Table B
ID     Payment
1      17.5
2      0
3      45.5

表A显示已支付的金额,表B显示仍应支付的金额。我想更新表B,以便在任何时候保证金尚未全额还清时,我会显示收取的总金额。例如,对于ID 1,我想将B.Payment更新为等于A.Payment + B.Payment但我不希望更新ID 2,因为此存款已经全额支付。我尝试使用以下代码,但它更新了表格中的每一行,而不仅仅是部分付款的行:

UPDATE B 
SET B.[Payment] = (A.[Payment] + B.[Payment]) 
FROM B LEFT JOIN A ON A.[ID] = B.[ID] 
WHERE A.[ID2] = 'REG' and A.[ID3] = 'P' 

如果满足表A中的条件,我如何才更新表B中的字段?

2 个答案:

答案 0 :(得分:1)

试试这个:

UPDATE b SET b.Payment = b.Payment + a.Payment
FROM B b 
    JOIN (SELECT a.ID, Payment = sum(Payment) FROM A a 
          WHERE a.ID2 = 'REG' AND a.ID3 = 'P'
          GROUP BY a.ID) a ON b.ID = a.ID

它汇总了表A中每个ID的所有付款,然后将其添加到表B中的付款列。

答案 1 :(得分:0)

我不确定你的代码中b.id2指的是什么。

试试这个

UPDATE b
SET b.payment = b.payment +
                (SELECT a.payment FROM a WHERE a.id=b.id AND a.id2='REG')
WHERE b.payment<>0;