如何从SQL Server中的特定行开始行号

Kir*_*iga 3 sql sql-server sql-server-2012

我有一个表,其中有一ARR列存储各种值。当ARR列的值为4 时,我必须生成行号。

我的桌子

Sno   Data   ARR
----------------
 1    AAA     0
 2    AAA     1
 3    AAA     1
 4    AAA     2
 5    AAA     3
 6    AAA     4
 7    AAA     5
 8    AAA     5
 9    AAA     6
10    AAA     4
11    AAA     5
12    AAA     6
Run Code Online (Sandbox Code Playgroud)

所需结果:

Sno   Data   ARR   RowNumber
----------------------------
 1    AAA     0       0
 2    AAA     1       0 
 3    AAA     1       0
 4    AAA     2       0
 5    AAA     3       0
 6    AAA     4       1
 7    AAA     5       2
 8    AAA     5       3
 9    AAA     6       4
10    AAA     4       1
11    AAA     5       2
12    AAA     6       3
Run Code Online (Sandbox Code Playgroud)

在此处Sno=10(值4 in ARR),rownumber再次从1开始。

Gor*_*off 6

我想你要:

select t.sno, t.data, t.arr,
       (case when grp >= 1
             then row_number() over (partition by grp order by sno)
             else 0
        end) as rownumber
from (select t.*,
             sum(case when arr = 4 then 1 else 0 end) over (order by sno) as grp
      from t
     ) t;
Run Code Online (Sandbox Code Playgroud)