在计算一定数量的行之后重置ROW_NUMBER(或类似函数)

时间:2018-04-25 20:38:57

标签: sql sql-server tsql

我正在寻找一种方法,在计算X行数后将row_number()函数重置为1。

我希望我的数据看起来像这样。

例如,我想在3行后重置

YEAR    RowNumber
-----------------
2000    1
2001    2
2002    3
2003    1
2004    2
2005    3
2006    1
2007    2
2008    3
2009    1

这可能吗?

2 个答案:

答案 0 :(得分:2)

使用如下表达式:

(ROWNUMBER() OVER(ORDER BY YEAR)) % 3 

基本上将除法后的余数除以3

答案 1 :(得分:1)

另一个答案很接近,但需要CASE来解释Rownumber 3

select 
    RowNumber = case when row_number() over (order by a) % 3 = 0 then 3 else row_number() over (order by a) % 3 end
    ,a
from (values(1),(2),(3),(4),(5),(6),(7),(8)) as V(a)

所以在你的情况下

RowNumber = case when row_number() over (order by Year) % 3 = 0 then 3 else row_number() over (order by Year) % 3 end

或者,使用REPLACE

RowNumber = replace(row_number() over (order by Year) % 3,0,3)