我有三张桌子
现在,历史和保留表
到一天结束时,我必须清除整个当前表数据,例如,如果“历史记录”表中已有一个ID,那么我必须查看余额,然后从该表中减去当前余额。
如果balance- currentbalance <0,则从历史记录表中减去余额,使其为零,并在历史记录表中添加新行,并以currentbalance-balance作为余额
如果历史记录表中没有ID并且currentbalance> 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
我想要类似Present的结果:
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
我已经编写了一些复杂的代码。谁能给我最佳解决方案。
使用以下查询:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句