Environnement: SQL Server 2012
J'ai besoin d'aide avec une requête de maintenance pour mettre à jour les 4 null dans l'illustration suivante. J'ai aussi un sqlfiddle à regarder (édité)
Dans cet exemple, la première valeur de SideSort null doit être 7.0 car il existe un SideId existant de 1 qui a une valeur à utiliser. La seconde devrait être 8.0.
Il en va de même pour TopSort, cependant, s'il n'y a pas de TopId ou SideId existant, la valeur par défaut est 1.
Vous pouvez le faire de cette façon:
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
Comme il y a plusieurs valeurs pour les mêmes topSort
et sideSort
, je returnne juste le top 1
dans la requête interne mais vous voudrez peut-être le replace par quelque chose qui ne returnnera qu'un seul logging.
Si le SideId n'est pas l' ID de l'logging SideSort à utiliser, la jointure est effectuée sur le même SideId. la mise à jour est:
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