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;
プレ>残念ながら、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;
プレ>