您好我需要编写一个查询来填充下表中的CurrentQuantity字段。我本来想使用while循环,但我想知道是否有办法编写递归查询来实现这一点。
基本上,currentQuantity是当前记录的下一个可用currentQuantity + QuantityChanged。因此在这种情况下,ID -11的currentQuantity是ID20的CurrentQuantity,它是当前记录的-45 + QuantityChanged,它是(-5 * -1),因此它变为-40。
ID列始终是递增的,因此我们可以对此做出假设。
我一直在尝试使用CTE编写递归查询,但不确定从哪里开始......任何帮助都将受到高度赞赏!
答案 0 :(得分:0)
不太好,因为您的数据并不真正相关。尽管如此管理 - 示例代码:
create table #data (id int, currentQuantity int, quantityChanged int);
insert into #data values (-30, NULL, -10);
insert into #data values (-24, NULL, -10);
insert into #data values (-22, NULL, -10);
insert into #data values (-11, NULL, -5);
insert into #data values (20, -45, -5);
select * from #data;
;with rcte as (
select id, currentquantity, quantityChanged, 0 as Level
from #data where id = 20
union all
select d.id, r.currentquantity + (d.quantityChanged * -1),
d.quantityChanged, level + 1
from #data d inner join rcte r on d.id < r.id
)
update #data
set currentQuantity = r.currentQuantity
from #data d
inner join rcte r
on d.id = r.id
inner join (
select id, row_number() over (order by id desc) - 1 level
from #data
) idl
on r.id = idl.id
and r.level = idl.level;
select * from #data;
那应该产生你想要的东西。
注意:如果您使用的是SQL Server&gt; 2008你也可以使用超前/滞后函数来做到这一点。