我正在尝试更新SQL中的表。特别是尝试通过减去我通过主键链接的另一个表中的数值来更新数字字段。例如,更新此表:
ID NAME BALANCE CURRSTATUS
1 FRED 45 OWED
2 JAMES 21 OWED
3 JOHN 0 PAID
4 BETH 33 OWED
5 HARRY 5 REFUND
6 WILLIAM 555 COLLECT
通过应用此表的行:
ID AMOUNT
6 500.00
6 55.00
所以我的预期结果与第一张表相同,只不过William的余额为0(555-500-55 = 0)。
我正在使用这样的sql语句:
UPDATE
TABLE1
SET
BALANCE = BALANCE - TABLE2.AMOUNT
FROM
TABLE2
LEFT OUTER JOIN TABLE1 ON TABLE1.ID = TABLE2.ID
这适用于第一行但不执行table2中的第二行。我的最终结果总是55,而不是0.当我在第二张表中的两行是针对同一个人时,我只有这个问题。示例:如果我有一行威廉和一行约翰,他们都会按预期行事。
我错过了什么吗?或者只是UPDATE如何运作?
答案 0 :(得分:3)
预聚合:
{{1}}
答案 1 :(得分:0)
在这里,您可以根据自己的情况选择CTE。
在CTE中准备您的套装,如从明确金额扣除后的明智总金额。然后在第一个表上进行更新。
;WITH CTE AS(
SELECT T1.ID , T1.BALANCE- SUM(T2.AMOUNT) as AMT
FROM TABLE1 T1
INNER JOIN TABLE2 T2 ON T1.ID = T2.ID
GROUP BY T1.ID
)
UPDATE TABLE1 SET TABLE1.BALANCE = CTE.AMT
FROM CTE WHERE TABLE1.ID= CTE.ID