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.
您需要一组相邻行中的行号.但是你需要定义组.它似乎是累积的总和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)