sql中的行号在生成
我在下面的问题中面临一个问题sql中的行号在生成,sql,sql-server,row-number,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 ro
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开始。
请告诉我缺少什么。尝试使用模运算:
select ((row_number() over (order by settle_id) - 1) % 10) + 1 as rowid, settle_id
from student;
一些数据库使用
mod()
函数而不是%
使用下面的查询来获得预期的结果
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
你应该用你正在使用的数据库标记你的问题。根据
#tmp
和top 100
语法添加了sql server
标记。上述查询仅从2开始rowid。因此使用-1而不是+1-应用一些基本数学@维拉<代码>行号()从1开始,但模从0开始返回。解决办法是减去1,然后再加回去。