繁体   English   中英

ROW_NUMBER达到一定数量后如何使ROW_NUMBER重新开始(重置)

[英]How to get ROW_NUMBER to start over (reset) after ROW_NUMBER reaches a certain number

如果每个taskName最多包含3个,我需要ROW_NUMBER列重新开始。 可以有多个具有相同名称的任务,因此,如果有三个以上具有相同名称的任务,则需要ROW_NUMBER列重新开始。

出现新的任务名称后,下面的代码仅让我的ROW_NUMBER列重置,但是,如果数量增加到3,并且仍然存在相同名称的另一个任务,则我需要这样做并将ROW_NUMBER列重置为一个。

SELECT t.[taskId], tq.name as taskName, 
ROW_NUMBER() OVER(PARTITION BY tq.name 
    ORDER BY tq.name) AS RowNum 
FROM Task t (NOLOCK)
order by tq.name asc

当前结果:

taskID  taskName  RowNum
1       Name1     1
2       Name1     2
3       Name1     3
4       Name1     4
5       Name1     5
6       Name1     6
8       Name2     1
8       Name2     2

预期成绩:

taskID  taskName  RowNum
1       Name1     1
2       Name1     2
3       Name1     3
4       Name1     1
5       Name1     2
6       Name1     3
8       Name2     1
8       Name2     2

使用取模算法:

SELECT t.[taskId], tq.name as taskName, 
       1 + (ROW_NUMBER() OVER (PARTITION BY tq.name ORDER BY tq.name) - 1) % 3 AS RowNum_3 
FROM Task t 
ORDER BY tq.name asc;

假设数据库是MSSQL:

SELECT t.[taskId], tq.name as taskName,    
CASE 
    WHEN (ROW_NUMBER() OVER(PARTITION BY tq.name ORDER BY tq.name))%3 = 0 THEN 3 
    ELSE (ROW_NUMBER() OVER(PARTITION BY tq.name ORDER BY tq.name))%3 
END AS RowNum 
FROM Task t (NOLOCK)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM