SQL 如何创建一个计数,在一定行数后移动到下一个数字,然后循环返回重新开始
SQL how to create a count that moves to the next number after a certain number of rows and then loops back to start over
我需要能够创建一个计数最多为 3 的列,但在重新开始之前会每次提供 3 次数字 1-3。
我下面的当前代码最多只能数到 3 并重新开始。我需要它对每个数字计数 3 次然后重新开始
Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable
Table 在数据库中:
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
子句,从而确保正确排序(至少如果此排序没有歧义,例如它是唯一的,也许是主键)
我需要能够创建一个计数最多为 3 的列,但在重新开始之前会每次提供 3 次数字 1-3。
我下面的当前代码最多只能数到 3 并重新开始。我需要它对每个数字计数 3 次然后重新开始
Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable
Table 在数据库中:
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
子句,从而确保正确排序(至少如果此排序没有歧义,例如它是唯一的,也许是主键)