如何根据同一个表中的现有记录更新字段

时间:2013-11-24 08:21:44

标签: sql sql-server

环境:SQL Server 2012

我需要有关维护查询的帮助来更新下图中的4个空值。我也有一个sqlfiddle to look at (edited)

在此示例中,第一个SideSort null应为7.0,因为现有的SideId为1,具有要使用的值。第二个应该是8.0。

TopSort也是如此,但是,如果没有现有的TopId或SideId,则默认为1。

enter image description here

2 个答案:

答案 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

由于同一topSortsideSort有多个值,我只是在内部查询中返回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