Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Nörotz am Mai 20, 2016, 17:12:49

Titel: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: Nörotz am Mai 20, 2016, 17:12:49
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

Titel: Re: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: MaggieMay am Mai 20, 2016, 17:46:07
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?
Titel: Re: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: Nörotz am Mai 21, 2016, 12:18:39
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

 
Titel: Re: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: MaggieMay am Mai 21, 2016, 21:56:28
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!)
Titel: Re: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: Nörotz am Mai 23, 2016, 19:48:14
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
Titel: Re: Innerhalb einer Aktualisierungsabfrage Datensätze addieren/konsolidieren
Beitrag von: MaggieMay am Mai 26, 2016, 22:20:46
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"