Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren

Begonnen von Nörotz, Mai 20, 2016, 17:12:49

⏪ vorheriges - nächstes ⏩

Nörotz

Hallo liebe Access-Experten,

ich möchte über eine Aktualisierungsabfrage gleichartige Datensätze aus einer Tabelle addieren bzw. konsolidieren. In meinem Fall sollen hinsichtlich des Datenfeldes "Betrieb_Name" alle ausgelieferten Artikel des Betriebs "Abwicklungsbetr2" zu den Auslieferungsmengen des Betriebs "Abwicklungsbetr1" hinzuaddiert werden (siehe rot markierte Datensätze im Anhang). Anschließend müsste ich natürlich über eine Löschabfrage noch alle Datensätze des "Abwicklungsbetr2" löschen, um reduntande Artikel im Datenfeld "Artikel_Anzahl" auszuschließen (siehe grün markierte, konsolidierte Datensätze im Anhang).
Leider ist es mir bisher nicht gelungen, eine zielführende Aktualisierungsabfrage zu erstellen.
Ich wäre euch für jede gut verständlichen, pragmatischen Lösungsansatz bzw. Linktipp sehr dankbar!

Viele Grüße
Nörotz


MaggieMay

Hallo,

was hast du vor, wenn es zu einem Datensatz mit "Abwicklungsbetr2" keine passenden Datensatz mit "Abwicklungsbetr1" gibt? Der dürfte dann ja wohl nicht gelöscht werden, oder?
Freundliche Grüße
MaggieMay

Nörotz

Hey MaggieMay,

herzlichen Dank für deine Rückmeldung!  :)
Du hast natürlich grundsätzlich Recht. In diesem Fall jedoch sollten die Datensätze von "Abwicklungsbetr2" zwingend zu den Datensätzen von "Abwicklungsbetr1" passen. Grund: Ich hatte bereits im ersten Schritt über eine Aktualisierungsabfrage alle Datensätze mit Bezeichnung "Abwicklungsbetr2" in "Abwicklungsbetr1" abgeändert bzw. abändern wollen. Aus dieser vorgelagerten Aktualisierung sind nun gerade diese hier diskutierten Datensätze übrig geblieben, weil sie wegen entsprechender etwaiger Schlüsselverletzungen nicht berücksichtigt werden konnten (hier garantiert zusammengesetzter Schlüssel eindeutige Datensätze pro Fakturiertag).
Wären deine Bedenken damit zurecht ausgeräumt?
Hättest du zudem oder jemand anders eine pragmatische Idee für die Lösung meines Problems?

Viele Grüße
Nörotz

 

MaggieMay

Hallo,

so könnte das bspw. aussehen:
Update tabelle As t1 Set t1.Artikel_Anzahl = (Select Sum(t2.Artikel_Anzahl) From tabelle As t2 Where t2.Tag = t1.Tag And t2.Kunden_Name = t1.Kunden_Name And t2.VersandSys = t1.VersandSys And t2.Batch = t1.Batch)

danach können die 2er gelöscht werden:
Delete * From tabelle Where Betrieb_Name = "Abwicklungsbetr2"

(ungetestet!)
Freundliche Grüße
MaggieMay

Nörotz

Hallo MaggieMay,
erst mal vielen Dank für deinen Lösungsvorschlag! :)
Leider funktioniert der SQL-Code bei mir noch nicht. Ich hätte vorher noch die Zusatzinfo geben müssen, dass neben "Abwicklungsbetr1" und "Abwicklungsbetr2" weitere "Abwicklungsbetr1,2,3 ...n"  innerhalb der zu konsolidierenden Tabelle t1 existieren. Demnach müsste der SQL-Code noch zusätzliche Bedingungen bzgl. Betrieb_Name berücksichtigen.
Hier hatte ich schon Code-Erweiterungen wie z.B.:
<... And  t2.Betrieb_Name = "Abwicklungsbetr2" And  t1.Betrieb_Name = "Abwicklungsbetr1">
ausprobiert, die bei der Überprüfung der  Abfrage jedoch im Ergebnis (Anz. Datensätze in Datenblattansicht) leider stets ein Vielfaches an Datensätzen im Vergleich zur Ausgangstabelle  t1 ergab.

Würde mich über jede weitere Hilfestellung von dir/euch sehr freuen.

Gruß
Nörotz

MaggieMay

Hallo,

das Problem könnte doch höchstens bei der Löschabfrage auftreten, die Aktualsierungsabfrage dürfte davon nicht betroffen sein, dort wird einfach alles aufsummiert, was den gleichen Inhalte in den Datenfeldern Tag, Kunden_Name und VersandSys hat.

Die Löschabfrage könnte demnach folgendermaßen aussehen:
Delete * From tabelle Where Betrieb_Name <> "Abwicklungsbetr1"
Freundliche Grüße
MaggieMay