我在下面的查询中面临一个问题
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开始。 请让我知道我错过了什么。
答案 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