sql中的行号有生成问题

时间:2014-11-05 11:19:19

标签: sql sql-server row-number

我在下面的查询中面临一个问题

CREATE TABLE #tmp(rowid int,settle_id int)
insert into #tmp
select top 100 
case when row_number() over (order by settle_id) > 10 then row_number() over (order by settle_id) - 10 else row_number() over (order by settle_id) end as rowid,settle_id from student_id(nolock) 
select * from #tmp
drop table #tmp 

我希望行ID应该从1开始 - >每次都是10但是对于前两组,它从1> 10开始,但是从11开始。 请让我知道我错过了什么。

2 个答案:

答案 0 :(得分:1)

尝试使用模运算:

select ((row_number() over (order by settle_id) - 1) % 10) + 1 as rowid, settle_id
from student;

有些数据库使用mod()函数而不是%

答案 1 :(得分:1)

使用以下查询获取预期的结果

SELECT 
CASE WHEN ((row_number() over(order by settle_id) % 10) = 0) 
     THEN 10 
     ELSE (row_number() over (ORDER BY settle_id) % 10)  
END AS  RowID, settle_id
FROM student