SQL सर्वर 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 सर्वर 2012 से पहले, सबसे कुशल समाधान में कर्सर शामिल हो सकते हैं। SQL सर्वर 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;