none
Hilfe für Update RRS feed

  • 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.

    Dienstag, 7. Mai 2013 10:23

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
    Dienstag, 7. Mai 2013 11:28

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
    Dienstag, 7. Mai 2013 11:28
  • Vielen Dank Christoph, hat bestens funktioniert.

    Viele Grüße

    Andreas

    Dienstag, 7. Mai 2013 12:19