SQL 根据单独 table 中的条件更新 table
SQL Update table based on conditions in separate table
我有两个 table,每个都包含数千条已支付或欠下的保证金记录。格式是这样的:
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
其中 Table A 显示已支付的金额,table B 显示仍到期的金额。我想更新 table B,以便在保证金未全额付清时显示收取的总金额。例如,对于 ID 1,我想将 B.Payment 更新为等于 A.Payment+B.Payment 但我不想更新 ID 2,因为这笔押金已经支付在全。我尝试使用以下代码,但它更新了我的 table 中的每一行,而不仅仅是部分付款的行:
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'
如何在满足 table A 中的条件时仅更新 table B 中的字段?
我不确定 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;
试试这个:
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
它将每个 ID 在 table A 中的所有付款相加,然后将其添加到 table B 中的付款列。
我有两个 table,每个都包含数千条已支付或欠下的保证金记录。格式是这样的:
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
其中 Table A 显示已支付的金额,table B 显示仍到期的金额。我想更新 table B,以便在保证金未全额付清时显示收取的总金额。例如,对于 ID 1,我想将 B.Payment 更新为等于 A.Payment+B.Payment 但我不想更新 ID 2,因为这笔押金已经支付在全。我尝试使用以下代码,但它更新了我的 table 中的每一行,而不仅仅是部分付款的行:
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'
如何在满足 table A 中的条件时仅更新 table B 中的字段?
我不确定 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;
试试这个:
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
它将每个 ID 在 table A 中的所有付款相加,然后将其添加到 table B 中的付款列。