Я вычисляю данные счетов, где значение может быть получено по текущим значениям строки и предыдущим значениям строки.Моя проблема была в том, что я должен был получить два столбца, где оба столбца связаны между собой, и оба столбца были получены по текущим значениям строки и предыдущим значениям строки.
Мои образцы данных
create Table Accounts (SNo int,Groups varchar(10),ToCollect int,Collected int)
insert into Accounts values(1, 'A', 4748, 4650)
insert into Accounts values(2, 'A', 4643, 4582)
insert into Accounts values(3, 'A', 4582, 4482)
insert into Accounts values(4, 'A', 4482, 4415)
insert into Accounts values(5, 'A', 4415, 4330)
insert into Accounts values(6, 'A', 4332, 4241)
insert into Accounts values(7, 'A', 4241, 2246)
insert into Accounts values(8, 'A', 4166, 6000)
insert into Accounts values(9, 'A', 4080, 0)
Пробный запрос:
Select *,case when ToCollect>Collected then Collected Else ToCollect End Adjusted
,case when Collected>ToCollect then Collected-ToCollect Else 0 End Excess into #1
from Accounts
select a.SNo,a.Groups,a.ToCollect,a.Collected
,case when a.ToCollect>(a.Collected+b.Excess) then a.Collected+b.Excess Else a.ToCollect End Adjusted
,case when a.Collected+b.Excess>a.ToCollect then a.Collected+b.Adjusted-a.ToCollect Else 0 End Excess
from #1 a left join #1 b on a.SNo=b.SNo-1
Фактический результат:
SNo Groups ToCollect Collected Adjusted Excess
1 A 4748 4650 4650 0
2 A 4643 4582 4582 0
3 A 4582 4482 4482 0
4 A 4482 4415 4415 0
5 A 4415 4330 4330 0
6 A 4332 4241 4241 0
7 A 4241 2246 4080 0
8 A 4166 6000 4166 1834
9 A 4080 0 4080 0
Ожидаемый результат:
SNo Groups ToCollect Collected Adjusted Balance Excess
1 A 4748 4650 4650 98 0
2 A 4643 4582 4582 61 0
3 A 4582 4482 4482 100 0
4 A 4482 4415 4415 67 0
5 A 4415 4330 4330 85 0
6 A 4332 4241 4241 91 0
7 A 4241 2246 2246 1995 0
8 A 4166 6000 4166 0 1834
9 A 4080 0 1834 2246 0