2016-11-08 3 views
2

Ich habe eine SQL Server-Tabelle mit Spalten wie dies aber nur mit der Salary_ID Säule gefüllt:SQL Server - Update-Anweisung mit max und Gruppe von

Name: Salary 
Salary_ID, TotalAmount 

Ich habe eine andere SQL Server-Tabelle mit diesem Format und alle Spalten gefüllt:

Name: SalaryImport 
Row_ID, Salary_ID, Amount 

ich versuche, die Salary Tabelle mit der maximalen row_id für jeden salary_id zu aktualisieren. Derzeit gibt es viele Instanzen von jeder Salary_ID in SalaryImport und ich interessiere mich nur für die jüngste, die durch die höhere Nummer row_id angezeigt wird.

Gibt es Tipps, wie das gemacht werden kann? Ich dachte, ich würde eine SQL-Anweisung wie, aber es ist die Gruppierung zu viel (und ich kann Betrag von der Gruppe zu entfernen, weil es in der Auswahl ist!):

select max(Row_ID), Salary_ID, Amount 
from SalaryImport e 
group by Row_ID, Amount 
+0

Ihre 'GROUP BY'-Abfrage macht keinen Sinn. –

+1

Mögliches Duplikat von [Holen Sie die Zeile mit dem Max-Wert für eine Spalte] (http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a- Spalte) –

Antwort

5

Verwenden ROW_NUMBER Fensterfunktion

;with cte as 
(
select row_number() over(partition by Salary_ID order by Row_ID desc) as rn,* 
From yourtable 
) 
Update S 
Set TotalAmount = c.Amount 
From Salary s join cte c on s.Salary_ID = c.Salary_ID 
Where RN = 1 
+0

Warum wird es heruntergeregelt? –

+0

Ich habe für das Duplizieren einer Antwort, die hunderte Male auf eine Frage gepostet wurde, die Hunderte Male gepostet wurde, downvooted. Wir sollten Duplikate kennzeichnen, anstatt zu antworten, IMO. –

+0

Ich denke nicht, dass dies ein gültiger Grund ist, herunterzuschreiben. –