SQL如何创建一个计数,该计数在一定数量的行之后移动到下一个数字,然后循环返回以重新开始
我需要能够创建一个列,有一个计数高达3,但将提供数字1-3每三次,然后重新开始 下面我的当前代码最多只计算3次,然后重新开始。我需要它把每个数字数三次,然后重新开始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
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
子句,从而确保了正确的顺序(至少在这种顺序不含糊的情况下,例如,它是唯一的,可能是主键)太棒了,这正是我想要的!非常感谢。