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

时间:2019-05-06 11:16:26

标签: 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

必填结果:

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=10ARR中的值为4),rownumber再次从1开始。

1 个答案:

答案 0 :(得分:4)

我想你想要

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;