1

我很难找到如何做到这一点。我一直在寻找几个小时,但无法提出一个可行的解决方案。

我有两张桌子。

TableA - Code, TranDate, Amount

TableB - Code Amount

我希望通过扣除 TableA 中的金额总和来更新 TableB 金额(其中 a.code = b.code 和 a.TranDate > 'A GIVEN DATE'

我不得不承认对 SQL 的能力有限。我正在使用 SQL Server 2005。

4

4 回答 4

1

尝试:

@Date = 'A GIVEN DATE'
UPDATE TableB 
     SET TableB.Amount = TableB.Amount - (SELECT SUM(TableA.Amount) 
                                   FROM TableA as A, TableB 
                                   WHERE A.Code = B.Code AND A.TranDate > @Date) 
于 2013-08-09T15:12:01.563 回答
0

试试这个:

UPDATE TB 
SET
    TB.Amount = TB.Amount - TotalDeduction
FROM TableB TB
JOIN (SELECT Code, SUM(Amount) AS TotalDeduction FROM TableA GROUP BY Code) TA ON TA.Code = TB.Code
于 2013-08-09T15:09:25.007 回答
0
declare @date date,
update TableB
set TableB.Amount= TableB.Amount-sum(TableA.Amount) from TableA, TableB
where TableA.code = TableB.code and TableA.TranDate >@date  
于 2013-08-09T15:12:43.393 回答
0

使用通用表扩展的简单方法:

with cte as (
   select A.Code, sum( A.Amount ) as Amount
   from TableA A inner join TableB B on A.Code = B.Code 
   where A.TranDate > *someDete*
   Group by A.Code
)
update B
Set B.amount = CTE.amount
from TableB B inner join CTE on B.Code = CTE.Code

编辑到期 OP 评论:

CTE 可从 sqlserver 2005 获得:http ://technet.microsoft.com/en-us/library/ms190766(v=sql.90).aspx

查询在 sqlserver 2008 上测试:http ://sqlfiddle.com/#!3/9e424/1/0

于 2013-08-09T15:14:44.087 回答