SQL如何创建一个计数,该计数在一定数量的行之后移动到下一个数字,然后循环返回以重新开始

SQL如何创建一个计数,该计数在一定数量的行之后移动到下一个数字,然后循环返回以重新开始,sql,row-number,dense-rank,Sql,Row Number,Dense Rank,我需要能够创建一个列,有一个计数高达3,但将提供数字1-3每三次,然后重新开始 下面我的当前代码最多只计算3次,然后重新开始。我需要它把每个数字数三次,然后重新开始 Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable 以DB为单位的表格: Personid taskid 1 1 1 2 2

我需要能够创建一个列,有一个计数高达3,但将提供数字1-3每三次,然后重新开始

下面我的当前代码最多只计算3次,然后重新开始。我需要它把每个数字数三次,然后重新开始

Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable
以DB为单位的表格:

Personid taskid
1        1 
1        2
2        3
2        4
2        5
3        6
4        7
4        8
5        9
5        10
5        11
预期成果:

Personid taskid numberCount
1        1      1
1        2      1
2        3      1
2        4      2
2        5      2
3        6      2
4        7      3
4        8      3
5        9      3
5        10     1
5        11     1

您可以使用
行数
确定您的值。让行号为
x
。由于您正在重复第9个条目,所以取模9。为了便于计算,在此之前减去1。现在0-2->1,3-5->2,6-8->3。因此,除以3(整数除法)并加1

SELECT personid, taskid,
    ((row_number() OVER (ORDER BY personid) - 1) % 9) / 3 + 1 AS taskNumber2
FROM taskTable
ORDER BY personid

还要注意的是,我在整个语句中添加了与窗口函数中相同的
orderby
子句,从而确保了正确的顺序(至少在这种顺序不含糊的情况下,例如,它是唯一的,可能是主键)

太棒了,这正是我想要的!非常感谢。