Benutzer mit den meisten Antworten
Hilfe für Update

Frage
-
Hallo Zusammen,
ich brächte mal etwas Hilfe. Ich habe zwei Tabellen in der eine Tabelle durch einen Datensatz aus der anderen Tabelle upgedatet werden soll. Dies ist so weiter nicht schwierig. Allerdings habe ich damit so meine Probleme da die zweite Tabelle mehrere Datensätze zu ersten Tabelle enthält und jeweils mit dem aktuellsten Datensatz upgedatet werden soll. Ich habe dies einmal als Beispiel aufbereitet:
CREATE TABLE #TEMP1 ( [SalesNo] varchar(20), [SalesLine] int, [Nummer] int, ); CREATE TABLE #TEMP2 ( [SalesNo] varchar(20), [SalesLine] int, [Nummer] int, [Datum] Datetime ); INSERT INTO #TEMP1 VALUES ('10000','1',''), ('20000','1',''); INSERT INTO #TEMP2 VALUES ('10000','1','1','130201 17:00:00'), ('10000','1','2','130202 15:00:00'), ('10000','1','3','130202 17:00:00'), ('20000','1','1','130201 17:00:00'), ('20000','1','2','130202 17:00:00'); /* --Anzeige SELECT * FROM #TEMP1 SELECT * FROM #TEMP2 -- Aufräumen DROP TABLE #TEMP1 DROP TABLE #TEMP2 */
Als Endergebniss hätte ich jetzt gern, das in der Tabelle #TEMP1 folgende Werte stehen:
'10000' , '1' , '3'
'20000' , '1' , '2'Vielen Dank für Eure Hilfe.
Antworten
-
Hallo! Das sollte über ROW_NUMBER und eine CTE zu lösen sein.
With NumberedRows as ( Select SalesNo, SalesLine, Nummer, ROW_NUMBER() OVER(PARTITION BY SalesNo, SalesLine ORDER BY Datum Desc) as rn1 from #TEMP2 ) Update #TEMP1 set Nummer = n.Nummer from #TEMP1 t Inner Join NumberedRows N on t.SalesNo = n.SalesNo and t.SalesLine = n.SalesLine where rn1 = 1;
Beachte bitte, dass das Statement vor dem WITH mit einem Semikolon beendet sein muss.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu/- Als Antwort markiert ASchulze23 Dienstag, 7. Mai 2013 12:18
Alle Antworten
-
Hallo! Das sollte über ROW_NUMBER und eine CTE zu lösen sein.
With NumberedRows as ( Select SalesNo, SalesLine, Nummer, ROW_NUMBER() OVER(PARTITION BY SalesNo, SalesLine ORDER BY Datum Desc) as rn1 from #TEMP2 ) Update #TEMP1 set Nummer = n.Nummer from #TEMP1 t Inner Join NumberedRows N on t.SalesNo = n.SalesNo and t.SalesLine = n.SalesLine where rn1 = 1;
Beachte bitte, dass das Statement vor dem WITH mit einem Semikolon beendet sein muss.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu/- Als Antwort markiert ASchulze23 Dienstag, 7. Mai 2013 12:18