我有2张如下表
表格1
Bank_Name
Bank_ACNO
Bank_Branch
Bank_Balance
表格 - 2
Emp_ID
Amount_Paid
表-1包含每个银行ACNO的唯一记录。但表2包含多个记录。现在我想用Sum(Table-1.Bank_Balance + Amount_Paid)更新Table-1(Bank_Balance),其中Table-1.Bank_ACNO = Table-2.Emp_ID。
我尝试了下面没有工作的查询。
UPDATE Bank_Master
SET Bank_Balance = ( Bank_Master.Bank_Balance
+ Order_Archieve_Temp.Amount_Paid )
OUTER JOIN Order_Archieve_Temp
ON Bank_Balance.Bank_ACNO=Order_Archieve_Temp.Emp_ID)
答案 0 :(得分:0)
尝试此查询:
BEGIN TRAN;
UPDATE t1
SET Bank_Balance = t1.Bank_Balance + ISNULL(x.Total_Amount_Paid,0)
-- or
-- SET Bank_Balance = ISNULL(t1.Bank_Balance,0) + ISNULL(x.Total_Amount_Paid,0)
-- or
-- SET Bank_Balance = NULLIF(ISNULL(t1.Bank_Balance,0) + ISNULL(x.Total_Amount_Paid,0), 0)
FROM dbo.Table1 t1
OUTER APPLY
(
SELECT SUM(t2.Amount_Paid) AS Total_Amount_Paid
FROM dbo.Table2 t2
WHERE t1.Bank_ACNO = t2.Emp_ID
) x
ROLLBACK
-- COMMIT
答案 1 :(得分:0)
<强> Here is the SQLFiddel Demo 强>
以下是您可以尝试的更新查询:
Update T1
set T1.Bank_Balance = t1.Bank_Balance + t2.Amount_Paid
FROM TABLE1 T1,
(select Emp_ID,sum(Amount_Paid) as Amount_Paid
from Table2
group by Emp_ID ) as T2
WHERE T1.Bank_ACNO = T2.Emp_ID
答案 2 :(得分:0)
如果这仍然是你的桌面设计,你最好保持你的数据库处于严格的控制之下:在大多数这种情况下,必须确定平衡的应用程序将通过从一些已知和良好的实时计算它来实现受控制的状态(例如,从上一个陈述日期开始)作为 余额的总和,以及之后发生的所有事务。
目前的设计似乎容易错误地计算平衡,并且将错误持续存在于未来。
这里是否存在任何可能的并发问题(多方可能从不同的连接执行同一个语句?)。您的事务隔离级别是什么?