我需要一个具有年度“begin_year”值的查询,一些计算以获得“end_year”值,然后 end_year 值成为下一条记录的 begin_year 值。
在这个简化的例子中,我每年只增加 10%。还有很多计算要做,我正在简化以专注于让 End_Year 成为下一年的 begin_year 值的任务......
Year Begin Value End Value
1 100 110 (each end-value is a 10% increase from the begin value)
2 110 121
3 121 133.1
4 133.1 146.4
... etc ...
我多次尝试让 Begin_Value 成为 End_value 的 lag() 会导致 catch-22,其中 end_value 未定义,因为它是在 BeginValue 定义之后定义的。当 begin 和 end 值相互依赖时,这似乎是不可能的?
(DatesAndNumbers 表只是一个包含记录 0、1、2、3、4...10 的表)
select dan.theNumber the_year
, beginValue.amount as Begin_Balance
, endValue.amount as End_Balance
from datesAndNumbers dan
outer apply (
select case when dan.theNumber = 0 then 100
else lag(endValue.amount, 1, 100) over (order by dan.theNumber)
end amount
) beginValue
outer apply (
select beginValue.amount * 1.10 as amount
) endValue
where dan.theNumber between 0 and 10
order by dan.theNumber
我已经尝试了很多次,我希望在一个查询中做到这一点,而不是游标或 while 循环。仔细观察 lag() 以拉低先前记录的最终值,然而,最终值是根据开始值计算的,因此创建了似乎不可能的依赖关系。
这是 SQL Server 2018