Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern (https://www.delphipraxis.net/182331-sql-server-mehrere-datensaetze-gleichzeitig-vergleichen-und-aendern.html)

romber 17. Okt 2014 11:16

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern
 
Zitat:

Zitat von Sir Rufo (Beitrag 1276382)
So solltest du jeweils den ersten Wert bekommen, den du dann in alle anderen Datensätze reinpassten musst
SQL-Code:
SELECT v_id, v_nr, v_from
FROM vertrag
WHERE (v_nr, v_id) IN ( SELECT v_nr, MIN( v_id ) FROM vertrag GROUP BY v_nr )

Wie ich das für jeden Vertrag einzeln mache, ist mur klar, mich würde interessieren, ob uns wie ich das mit einer Script für alle Verträge gleichzeitig erledigen kann.

Zitat:

Zitat von Sir Rufo (Beitrag 1276379)
Ähm ja, aber wozu war das nötig, eigentlich macht man sich dafür eine View, die nur die aktuellen Einträge zeigt und schreibst deine Änderungen (UPDATE, DELETE, INSERT) in diese View. Die INSTEAD OF Trigger kümmern sich dann um diese historische Protokollierung. Ein Tool wird dafür nicht benötigt.

Das Tool ist nicht nur dafür da, es gibt noch jede Menge andere Aufgaben, die vom Tool erledigt werden.

Dejan Vu 17. Okt 2014 11:43

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern
 
Zitat:

Zitat von Sir Rufo (Beitrag 1276382)
So solltest du jeweils den ersten Wert bekommen, den du dann in alle anderen Datensätze reinpassten musst
SQL-Code:
SELECT v_id, v_nr, v_from
FROM vertrag
WHERE (v_nr, v_id) IN ( SELECT v_nr, MIN( v_id ) FROM vertrag GROUP BY v_nr )

Seit wann geht das denn? Ich meine ein 'IN' mit einem 2-Tupel? :gruebel:

PS: Das könnte so gehen (ungetestet)
SQL-Code:
Update T
  set Datum = M.minDatum

from Vertraege T
join ( 
  select v_id, v_datum
    from Vertraege v
         join (select v_id, min (v_nr) as minNr from Vertraege) m
           on v.v_id=m.v_id and v_nr = m.minNr
  ) s
  on T.v_id = s.v_id
Das innerste Select 'm' erstellt für alle v_id die kleineste v_nr (als minNr)
Das wird dann mit den Verträgen verknüpft, um für jede v_id das Datum der kleinsten v_nr zu bekommen (s)
Und das wird dann als Quelle für das Update verwenden

Müsste funzen

romber 17. Okt 2014 16:41

AW: SQL Server: Mehrere Datensätze gleichzeitig vergleichen und ändern
 
Vielen Dank, jetzt klapt es!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz