环境:SQL Server 2012
我需要有关维护查询的帮助来更新下图中的4个空值。我也有一个sqlfiddle to look at (edited)
在此示例中,第一个SideSort null应为7.0,因为现有的SideId为1,具有要使用的值。第二个应该是8.0。
TopSort也是如此,但是,如果没有现有的TopId或SideId,则默认为1。
答案 0 :(得分:1)
你可以这样:
update Tracker
set topSort = (select top 1 isnull(topSort, 1) from Tracker T where T.topId = Tracker.topId)
where topSort is null
update Tracker
set sideSort = (select top 1 isnull(sideSort, 1) from Tracker T where T.sideId = Tracker.sideId)
where sideSort is null
由于同一topSort
和sideSort
有多个值,我只是在内部查询中返回top 1
,但您可能希望将其替换为仅返回一个的其他内容记录。
答案 1 :(得分:1)
如果SideId不是要使用的SideSort记录的 id ,则在同一SideId上完成连接。 更新是:
update t1
set t1.sidesort = coalesce(t2.sidesort,1)
FROM Tracker t1
left join Tracker t2
on t2.SideId = t1.sideid
and t2.SideId is not null
where t1.sidesort is null
update t1
set t1.topsort = coalesce(t2.topsort,1)
FROM Tracker t1
left join Tracker t2
on t2.topid = t1.topid
and t2.topId is not null
where t1.topsort is null