Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर - संचयी योग जो 0 मिलने पर रीसेट हो जाता है

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. चयन सूची में कहीं और एक उपनाम का संदर्भ लें

  2. इस SQL ​​​​कथन के लिए निष्पादन का क्रम क्या है

  3. कैसे जांचें कि टेबल पर कौन से ताले हैं

  4. सोमवार को 2 तिथियों के बीच खोजें

  5. क्लस्टर्ड और नॉन-क्लस्टर इंडेक्स का वास्तव में क्या मतलब है?