我想对列进行累加,但是每当遇到0时就重置聚合值
这是我尝试做的一个例子:
该数据集:
pk price 1 10 2 15 3 0 4 10 5 5
给出以下内容:
pk price 1 10 2 25 3 0 4 10 5 15
在SQL Server 2008中,由于无法使用分析函数,因此受到了严重限制。以下方法效率不高,但可以解决您的问题:
with tg as ( select t.*, g.grp from t cross apply (select count(*) as grp from t t2 where t2.pk <= t.pk and t2.pk = 0 ) g ) select tg.*, p.running_price from tg cross apply (select sum(tg2.price) as running_price from tg tg2 where tg2.grp = tg.grp and tg2.pk <= tg.pk ) p;
las,在SQL Server 2012之前,最有效的解决方案可能涉及游标。在SQL Server 2012+中,您只需执行以下操作:
select t.*, sum(price) over (partition by grp order by pk) as running_price from (select t.*, sum(case when price = 0 then 1 else 0 end) over (order by pk) as grp from t ) t;