Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server - Tổng tích lũy đặt lại khi gặp phải 0

Trong SQL Server 2008, bạn bị hạn chế nghiêm trọng vì bạn không thể sử dụng các hàm phân tích. Cách sau không hiệu quả nhưng sẽ giải quyết được vấn đề của bạn:

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;

Than ôi, trước SQL Server 2012, giải pháp hiệu quả nhất có thể liên quan đến con trỏ. Trong SQL Server 2012+, bạn chỉ cần thực hiện:

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. Một bản cập nhật với nhiều điều kiện. SQL 2008

  2. Áp dụng chéo ở Linq

  3. 3 cách chuyển đổi HEX sang INT trong SQL Server (T-SQL)

  4. PHP Lỗi nghiêm trọng:Gọi đến hàm không xác định mssql_query ()

  5. Cài đặt cụm chuyển đổi dự phòng SQL Server -3