我很难找到如何做到这一点。我一直在寻找几个小时,但无法提出一个可行的解决方案。
我有两张桌子。
TableA - Code, TranDate, Amount
TableB - Code Amount
我希望通过扣除 TableA 中的金额总和来更新 TableB 金额(其中 a.code = b.code 和 a.TranDate > 'A GIVEN DATE'
我不得不承认对 SQL 的能力有限。我正在使用 SQL Server 2005。
我很难找到如何做到这一点。我一直在寻找几个小时,但无法提出一个可行的解决方案。
我有两张桌子。
TableA - Code, TranDate, Amount
TableB - Code Amount
我希望通过扣除 TableA 中的金额总和来更新 TableB 金额(其中 a.code = b.code 和 a.TranDate > 'A GIVEN DATE'
我不得不承认对 SQL 的能力有限。我正在使用 SQL Server 2005。
尝试:
@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)
试试这个:
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
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
使用通用表扩展的简单方法:
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