0

我有 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) 更新表 - 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)
4

3 回答 3

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
于 2013-08-28T04:28:24.360 回答
0

这是 SQLFiddel 演示

以下是您可以尝试的更新查询:

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
于 2013-08-28T04:54:54.310 回答
0

如果这仍然是你的表设计,你最好让你的数据库处于真正严格的控制之下:在大多数这样的情况下,必须确定平衡的应用程序将通过从一些已知和良好控制的状态动态计算来做到这一点(例如,从最后一个报表日期开始)作为余额的总和,以及之后发生的所有交易。

当前的设计似乎容易受到平衡计算错误的影响,并且该错误在未来会持续存在。

这里是否存在任何可能的并发问题(多方是否可能从不同的连接执行相同的语句?)。你的事务隔离级别是多少?

于 2013-08-28T05:04:43.007 回答