根据另一列中的值增加然后中断并重新开始

Bli*_*ter 1 sql t-sql sql-server

我想增加一列,然后根据另一列中的值再次停止和重新开始.

例如:

我有一张桌子:

CustomerID  YearMonth   True_False  
9000        2013-01-01   0
9001        2013-02-01   0
9002        2013-03-01   0
9003        2013-04-01   0
9004        2013-05-01   0
9005        2013-06-01   1
9006        2013-07-01   0
9007        2013-08-01   0
9008        2013-09-01   0
9009        2013-10-01   1
9010        2013-11-01   0
Run Code Online (Sandbox Code Playgroud)

我想实现这个目标:

CustomerID  YearMonth   True_False  Sequence
9000        2013-01-01   0            1
9001        2013-02-01   0            2
9002        2013-03-01   0            3
9003        2013-04-01   0            4 
9004        2013-05-01   0            5
9005        2013-06-01   1            0
9006        2013-07-01   0            1
9007        2013-08-01   0            2
9008        2013-09-01   0            3
9009        2013-10-01   1            0
9010        2013-11-01   0            1
Run Code Online (Sandbox Code Playgroud)

所以这是基于True_False列.当True_False为0时,则中断并重新开始. (True_False = 0)的序列值不需要为0也可以为NULL.

Gor*_*off 5

您需要一组相邻行中的行号.但是你需要定义组.它似乎是累积的总和true_false.

所以:

select t.*, row_number() over (partition by grp order by year_month) - 1
from (select t.*, sum(true_false) over (order by year_month) as grp
      from t
     ) t;
Run Code Online (Sandbox Code Playgroud)