Reputation: 4480
I am facing one issue in below query
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
I want row id should start from 1 -> 10 everytime but for first two sets it start from 1->10 but there after it starts with 11. Please let me know what i am missing.
Upvotes: 0
Views: 95
Reputation: 1271241
Try using modulo arithmetic:
select ((row_number() over (order by settle_id) - 1) % 10) + 1 as rowid, settle_id
from student;
Some databases use the mod()
function instead of %
.
Upvotes: 1
Reputation: 3492
Use the below query to get the expected result.
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
Upvotes: 1