--生成测试数据
if exists (select * from sysobjects where id = OBJECT_ID('[t_RLoginname]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [t_RLoginname]
CREATE TABLE [t_RLoginname] (
[ID] [int] NOT NULL,
[Loginname] [varchar] (50) NULL,
[Guid] [varchar] (50) NULL)
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10701389,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10701581,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10701621,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10701658,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10701828,'17851307','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10702068,'17851307','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10702226,'17851307','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10702361,'17851307','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704102,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704166,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704559,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704615,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704715,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10704766,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10705208,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10705317,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10705637,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10705774,'21958792','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10780602,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10781073,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
INSERT [t_RLoginname] ([ID],[Loginname],[Guid]) VALUES ( 10781162,'未知','7E5863ED-53B2-5245-DE1F-0D08CC743356')
--查询出向上未知用户需要回填的loginname
select ID,guid,loginname,new_loginname
from (
select ID,guid,loginname,new_loginname =
(
SELECT TOP 1 loginname from [t_RLoginname] where
id=(select min(id) from [t_RLoginname]
where id>a.id and loginname <>'未知' AND guid = a.guid)
)
from [t_RLoginname] as a
where a.loginname = '未知'
) as b
where b.new_loginname is not null
--向上回填
--插入到临时表
select ID,guid,loginname,new_loginname
into [t_RLoginname_up]
from (
select ID,guid,loginname,new_loginname =
(
SELECT TOP 1 loginname from [t_RLoginname] where
id=(select min(id) from [t_RLoginname]
where id>a.id and loginname <>'未知' AND guid = a.guid)
)
from [t_RLoginname] as a
where a.loginname = '未知'
) as b
where b.new_loginname is not null
--更新记录
update a set a.loginname = b.new_loginname
from [t_RLoginname] as a,
[t_RLoginname_up] as b
where a.ID = b.ID
and a.guid = b.guid
--向下回填
--插入到临时表
select ID,guid,loginname,new_loginname
into [t_RLoginname_down]
from (
select ID,guid,loginname,new_loginname =
(
SELECT TOP 1 loginname from [t_RLoginname] where
id=(select max(id) from [t_RLoginname]
where id<a.id and loginname <>'未知' AND guid = a.guid)
)
from [t_RLoginname] as a
where a.loginname = '未知'
) as b
where b.new_loginname is not null
--更新记录
update a set a.loginname = b.new_loginname
from [t_RLoginname] as a,
[t_RLoginname_down] as b
where a.ID = b.ID
and a.guid = b.guid