如何从SQL Server中的特定行启动行号

如何从SQL Server中的特定行启动行号,sql,sql-server,sql-server-2012,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

我有一个带有
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
所需结果:

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
这里的
Sno=10
(ARR中的值4),
行数
再次从1开始。

我想您需要:

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;