merge-Befehl einsetzen.

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

merge-Befehl einsetzen.

Beitrag von UliTs »

Ich habe folgende Aufgabenstellung, die ich im folgenden Beispiel möglichst einfach darstellen möchte. Eine Rechnungstabelle mit z.B. folgenden Inhalt:

Code: Alles auswählen

Tabelle Rechnung
RechNr,Datum     ,RgText
1     ,01.04.2020,'Toller Text'
2     ,03.04.2020,'Supertoller Text'
3     ,02.07.2020,'blöder Text'
Jetzt möchte ich mit Hilfe des MERGE-Befehls den Rechnungstext von einer anderen Rechnung übernehmen. Wenn es die Rechnungs-Nr noch nicht gibt, soll der Datensatz neu angelegt werden.
Z.B. Rechnungstext von Rechnung 1 nach Rechnung 3 übernehmen (Rechnung 3 schon vorhanden). Ergebnis:

Code: Alles auswählen

Tabelle Rechnung
RechNr,Datum     ,RgText
1     ,01.04.2020,'Toller Text'
2     ,03.04.2020,'Supertoller Text'
3     ,02.07.2020,'Toller Text'
Und jetzt Rechnungstext von Rechnung 2 nach Rechnung 4 übernehmen (Rechnung 4 noch nicht vorhanden, als Datum kann das Tagesdatum eingetragen werden). Ergebnis:

Code: Alles auswählen

Tabelle Rechnung
RechNr,Datum     ,RgText
1     ,01.04.2020,'Toller Text'
2     ,03.04.2020,'Supertoller Text'
3     ,02.07.2020,'Toller Text'
4     ,02.07.2020,'Supertoller Text'
Ich bin mir sicher, das geht mit Hilfe des Merge-Befehls in Sql (hier speziell ADS). Aber irgendwie bekomme ich es nicht hin und ich habe keine Zeit mehr. Hat jemand die Lösung?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: merge-Befehl einsetzen.

Beitrag von Marcus Herz »

merge rechnung
using (select * from rechnung where rechnr = 2) as rechnung2
on rechnung.rechnr = 4
when not matched then insert(rechnr,datumrgtext) values(4, date(), rechnung2.rgtext)
when matched then update set rgtext = rechung2.rgtex; // hat gefehlt
Zuletzt geändert von Marcus Herz am Do, 02. Jul 2020 10:29, insgesamt 2-mal geändert.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: merge-Befehl einsetzen.

Beitrag von nightcrawler »

Hallo Uli,
dafür ist der MERGE Befehl nicht geschaffen ... er wird vergewaltigt! Mit MERGE wird üblicherweise eine Tabelle in eine andere eingebaut. Warum nicht einfach UPDATE bzw INSERT?

Code: Alles auswählen

UPDATE Rechnung SET RgText=(select RgText FROM Rechnung WHERE RechNr=1) WHERE RechNr=3;
INSERT INTO Rechnung(RechNr,Datum,RgText) SELECT 4,CURDATE(),RgText FROM Rechnung WHERE RechNr=2;
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: merge-Befehl einsetzen.

Beitrag von Marcus Herz »

MERGE- aber er funktioniert genau wie erwartet
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: merge-Befehl einsetzen.

Beitrag von UliTs »

Schon einmal Danke!
Ich schaue es mir morgen an.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten