【发布时间】:2014-08-26 21:09:43
【问题描述】:
我需要一个更新语句来解决 SQL Server 2000 上表中的重复问题。表结构如下所示。此表中没有主键。我需要一条 SQL 语句,在有重复值的情况下更新值,方法是将值加 5,直到不再有重复值。
DocNumber SeQNumber
Doc001 900
Doc001 900
Doc001 900
Doc001 903
Doc001 904
想要的结果
DocNumber SeqNUmber
Doc001 900
Doc001 905
Doc001 910
Doc001 903
Doc001 904
这是我尝试过的 我的最新尝试如下所示。在那个例子中,我只是添加了计数器,但 +5 是我真正需要的。
Declare @count as integer = (SELECT COUNT(*) AS DUPLICATES
FROM dbo.RM10101
GROUP BY DocNumbr, SeqNumbr
HAVING (COUNT(*) > 1))
Declare @counter as integer =1
While @Counter < @count
begin
With UpdateData As
(
SELECT DocNumbr,SeqNumbr,
ROW_NUMBER() OVER (ORDER BY [SeqNumbr] DESC) AS RN
FROM RM10101
)
UPDATE RM10101 SET SeqNumbr = (select max(SeqNumbr) from RM10101 where docNumbr = RM10101.DocNumbr and SeqNumbr=RM10101.SeqNumbr) + (@counter)
FROM RM10101
INNER JOIN UpdateData ON RM10101.DocNumbr = UpdateData.DocNumbr
where rn =@counter
SET @counter = @counter + 1
end
end
任何帮助将不胜感激。
谢谢,
鲍勃
【问题讨论】:
-
好的,鲍勃。你已经尝试了什么?请与我们分享您的努力,即使他们没有成功。
-
根据文档,ROW_NUMBER() 函数是在 SQL Server 2005 中添加的。您使用的是哪个版本的 SQL Server?
-
感谢帕特里克的回复。抱歉,如果我在帖子中不清楚,但我需要根据 docnumbr 中的重复项更新 seqnumbr。
-
它是 SQl 2000。我正在开发更高版本,不知道行号。
标签: sql sql-server sql-server-2000