[英]Update SQL Server cell data with the data of next record
我必须更新错误更新的SQL Server表之一的数据,这会导致一行的单元格数据覆盖下一行。 以下是表应处于正确状态的示例:
FirstName LastName EmailID
--------------------------------------------------
abc xyz abc.xyz@something.com
def 321 def.321@something.com
ghi 123 ghi.123@something.com
错误地将数据变为:
FirstName LastName EmailID
---------------------------------------------
abc xyz something
def 321 abc.xyz@something.com
ghi 123 def.321@something.com
我知道将找不到最后一个记录,但至少应正确恢复其他记录
假设您的表按firstName,lastName排序,则可以使用以下命令:
declare @contact as table (firstName varchar(255), lastName varchar(255), emailID varchar(255))
insert into @contact (firstName, lastName, emailID)
values
('abc', 'xyz', 'something')
,('def', '321', 'abc.xyz@something.com')
,('ghi', '123', 'def.321@something.com');
with contactCTE(rowNo, firstName, lastName, emailID)
as
(
select
ROW_NUMBER() OVER (ORDER BY firstName, lastName DESC)
,firstName
,lastName
,emailID
from
@contact
)
update c1
set
emailID = c2.emailID
from
contactCTE c1
inner join contactCTE c2 on c1.rowNo +1 = c2.rowNo;
select * from @contact
如果您的数据顺序不同,只需修改contactCTE
的ORDER BY
部分即可
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.