我需要能够创建一个计数最多为 3 的列,但在重新开始之前,每个列将提供数字 1-3 三次。
我下面的当前代码最多只能计数 3 并重新开始。我需要它数每个数字 3 次,然后重新开始
Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable
数据库中的表:
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
您可以使用row_number
来确定您的值。让行号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
另请注意,我在整个语句中添加了与 window 函数相同的ORDER BY
子句,从而确保正确的排序(至少如果此排序不是模棱两可的,例如它是唯一的,也许是主键(