我有两张桌子,每张桌子都有数千张已经支付或欠款的保证金记录。格式如下:
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中的字段?
答案 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;