我有三张桌子
现在,历史和保留表
到那天结束时,我必须清除整个目前的表格数据 如果在历史记录表中存在具有现有ID的Id,则我必须查看余额,然后从该表中减去当前余额。
如果平衡 - 电流平衡< 0然后从历史表中减去余额使其为零并在历史表中添加一个新行,其中currentbalance-balance为余额
如果历史记录表和currentbalance中没有ID> 0移动该记录以保存表。
如果currentbalance< = 0将当前表中的日期更改为第二天。我只需要一个查询就可以了。
如果保留表中有记录删除该记录并放置最新记录。
每次更新行时,请将DATE列更改为当前日期,而不是当前日期。
现:
ID Current_Balance Date
1 2000 25-06-2014
2 1500 25-06-2014
3 5000 25-06-2014
2 6000 25-06-2014
4 -200 25-06-2014
历史:
ID Balance Date
1 1500 24-06-2014
2 1600 24-06-2014
保持表:
ID Balance Date
3 125 24-06-2014
4 2000 24-06-2014
我想要结果 本:
ID Current_Balance Date
4 -200 26-06-2014
历史:
Id Balance Date
1 0 25-06-2014
1 500 25-06-2014
2 100 25-06-2014
保持:
ID Balance Date
3 5000 25-06-2014
4 2000 24-06-2014
我编写的代码有点复杂。任何人都可以为此提供最佳解决方案。
答案 0 :(得分:1)
使用以下查询:
UPDATE Persent
SET current_Balance = 0,
Date = GETDATE()
OUTPUT Inserted.ID, Deleted.current_Balance, Deleted.Date
INTO #P
FROM History h
WHERE h.Id = Persent.ID
AND h.balance - Persent.current_balance < 0
INSERT INTO History (Id, Balance, Date)
SELECT p.Id, p.Current_Balance, p.Date
FROM #P p
MERGE Hold AS Destination
USING (SELECT * FROM Present WHERE Current_Balance>0) AS Source ON Destination.Id = Source.Id
WHEN NOT MATCHED THEN INSERT (Id, Balance, Date) VALUES (ID,Current_Balance,Date)
WHEN MATCHED THEN DELETE
UPDATE Persent
SET Date = DATEADD(DAY, 1, GETDATE())
WHERE Persent.current_balance <= 0