Ich habe eine Tabelle, die Untersätze von Datensätzen für eine übergeordnete Tabelle hat. Jede Untergruppe hat eine Reihenfolge, die in einem Feld [rank]
gespeichert ist. Ich muss dieses Feld für eine bestimmte Untergruppe in dieser Tabelle aktualisieren, basierend auf einer neuen Bestellung im Feld otherRank
.T-SQL - Aktualisieren einer Teilmenge von Datensätzen durch Row_Number()
Hat die folgende Abdeckung es:
update mytable t1 set
[rank] = t2.new_rank_num
from (select t2.id, new_rank_num = row_number() over (order by t2.otherRank)
from mytable t2 where t2.parentID = 628) t2
where t1.id = t2.id
oder würde ich brauche:
update mytable t1 set
[rank] = t2.new_rank_num
from (select t2.id, new_rank_num = row_number() over (order by t2.otherRank)
from mytable t2 where t2.parentID = 628) t2
where t1.id = t2.id and t1.parentID = 628
Meine konkrete Frage ist, ich will nicht, etwas außerhalb des Aufgabengebiets von parentID 628 aktualisiert
Bearbeiten Ich bekomme einen Fehler, wenn Sie versuchen, dies auszuführen:
falsche Syntax in der Nähe von
t1
falsche Syntax in der Nähe vont2
so muss ich die Syntax zu denken sein:
update mytable set
[rank] = t2.new_rank_num
from (select id, new_rank_num = row_number() over (order by otherRank)
from mytable where parentID = 628) t2
where id = t2.id and parentID = 628
bearbeiten 2
OK, ich Ich habe dafür eine CTE-Lösung verwendet, wie von SqlZim empfohlen. Es sieht wie folgt aus:
;with cte as (
select t2.id, new_rank_num = row_number() over (order by t2.otherRank)
from mytable t2 where t2.parentID = 628
)
update t1 set
[rank] = t2.new_rank_num
from mytable t1
inner join cte t2 on t1.id = t2.id
Was passiert, wenn Sie es versuchen? –
Ich habe es zwar noch nicht ausprobiert, da ich in erster Linie ein paar Tipps zur Abfragesyntax benötigte. – scgough
Ich sehe nichts, das mit der Syntax grell falsch ist. Wenn es das gewünschte Ergebnis bringt, geh mit ihm. –