Sql server 使用编程在SQL Server中递增值
我在SQL Server中有一个表,它有3个字段Sql server 使用编程在SQL Server中递增值,sql-server,using,auto-increment,Sql Server,Using,Auto Increment,我在SQL Server中有一个表,它有3个字段 Id int identity(1,1) thRead int level int 现在在这个表中有一些线程,比如1-5个,都重复了5次,如下所示: 1,1,1,1,1 2,2,2,2,2 3,3,3,3,3 4,4,4,4,4 5,5,5,5,5 现在我想更新级别,对于一组记录,它应该从零开始递增,对于另一组记录,它应该从0开始递增,依此类推 我想要如下表所示的输出 1 0 1 1 1 2 1 3 1 4 2 0
Id int identity(1,1)
thRead int
level int
现在在这个表中有一些线程,比如1-5个,都重复了5次,如下所示:
1,1,1,1,1 2,2,2,2,2 3,3,3,3,3 4,4,4,4,4 5,5,5,5,5
现在我想更新级别,对于一组记录,它应该从零开始递增,对于另一组记录,它应该从0开始递增,依此类推
我想要如下表所示的输出
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2
2 3
2 4
3 0
3 1
3 2
3 3
3 4
请任何人帮我解决这个问题。。。更新应该使用select查询,因此不需要手动输入线程,它应该自动更新
谢谢和问候
阿巴斯电气瓦拉这是一次性更新吗?如果是这样的话,这就行了
with cte as
(
SELECT Id , thRead, level,
ROW_NUMBER() OVER (PARTITION BY thRead ORDER BY Id) -1 AS RN
FROM T
)
UPDATE cte
SET level = RN
如果您想对更难的新行执行此操作。您可以尝试此操作
;WITH Temp as
(
SELECT Id , thRead, ROW_NUMBER() OVER (PARTITION BY thRead ORDER BY Id) -1 'Level'
FROM YourTable
)
Select Id, ThRead, Level from Temp
输出与预期结果的相关性如何?你能解释一下吗?@Anil:事实上,对于论坛中添加的任何线程,其帖子级别都会增加,当另一个线程启动时,帖子级别会再次设置为0,因此对于任何线程,帖子级别都会增加,直到线程结束并启动新线程……伟大的帮助人。。。它起作用了。。。非常感谢anil,但如果可以,请解释一下这是怎么回事。。。我不明白它的逻辑。@Aabas-很高兴知道。。。查询的第一部分是CTS-公共表表达式。这将为您提供一组临时数据,您可以在主查询中使用这些数据。很像在FROM子句中创建的表。在这个CTS中,我使用了ROW_Number(),这是构建函数中的SQL,它为OVER part的PARTITION子句中提到的字段提供索引值。结果按ORDERBY子句为每个组排序。希望这能澄清你的想法。@Aabas-此外,如果我的答案真的解决了你的问题,你可以将其标记为已接受的答案:)