Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql中的行号在生成_Sql_Sql Server_Row Number - Fatal编程技术网

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,然后再加回去。