Neuigkeiten:

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

Mobiles Hauptmenü

Zuweisung von neuen, sequentiellen Nummern zu Datensätzen

Begonnen von dfens, Oktober 22, 2025, 13:42:15

⏪ vorheriges - nächstes ⏩

dfens

Liebe Gemeinde,
wieder ein neues Problem (siehe auch Anhang):
Ich habe eine Tabelle mit Order-Nummern und jede Order Nr. hat diverse Positionsnummern (PosID old). Diese alten Positionsnummern sind jedoch nicht immer sequentiell aufsteigend gereiht. Ich möchte nun mittels einer Abfrage neue, sequentiell aufsteigende Nummern (PosID new) für jeden Datensatz erstellen. Zudem benötige ich die neuen Positionsnummern einstellig.

Beispiele sind im Anhang. Hier die Erklärungen dazu:

111222555: Hier ist es noch simpel (Ich kann ja die alte Pos einfach durch 10 dividieren und die Sequenz bleibt somit bestehen)
245444444: Schon blöder. Hier sind die alten Positionen 10 und 30 - aber es sollte daraus 1 und 2 werden
322555444: Hier wäre aus 30 die Pos. 1 zu machen
455555444: Und hier sind überhaupt Sprünge dazwischen. 10 passt noch. Aber aus 40 sollte 2 und aus 70 sollte 3 werden.

Ist das irgendwie zu bewerkstelligen ? Bitte um  Euren Rat und evtl. ein Beispiel, wie ich das lösen könnte.
Danke Euch vielmals !!

Knobbi38

#1
Hallo,

schau mal hier, wie man so etwas mit SQL machen könnte:
https://www.access-programmers.co.uk/forums/threads/sequential-numbers-in-a-query.312520/

Knobbi38

dfens

Hi! Ja-Auf diesen beitrag bin ich bei meiner suche auch schon gestoßen. problem dabei ist aber, dass dort eine weitere spalte mit einer aufsteigenden zahl (ID) für jeden datensatz generiert wird. diese spalte habe ich nicht und ist in meinem beispiel auch nicht geplant. aber wenn das die einzig mögliche lösung ist, werde ich eben eine hilfsspalte mit so einer aufsteigenden nummer erstellen. hmmm... ich dachte da gibt es eine sauberere lösung mit irgendeiner wunderformel :-) danke . ich versuche mal mein glück!

Knobbi38

Hallo,

das ist ja auch genau richtig, denn diese lfd. Nummer brauchst du ja für die SQL-Update Anweisung.
Ich muss mich jetzt hier leider ausklinken, aber suche mal nach dem Begriff

"access sql sequence number within a group"

im Internet. Z.B.:
https://learn.microsoft.com/en-us/answers/questions/4825094/sequential-numbering-by-group

Knobbi38

PhilS

Zitat von: dfens am Oktober 22, 2025, 22:19:09ich dachte da gibt es eine sauberere lösung mit irgendeiner wunderformel
Schau dir mal FAQ 3.11 an:  https://www.donkarl.com?FAQ3.11
Du kannst auch mehrere Spalten in der Where-Klausel verwenden, wenn du keine einzelne eindeutige Spalte hast.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

dfens

Erstmal Danke an dieser Stelle an alle, die mir die Ratschläge und Links gesendet haben. Ich habe mir die Nacht um die Ohren geschlagen um das irgendwie hinzubekommen. Das mit den Hilfstabellen durchschaue ich einfach nicht und ich kann es auch nicht in die bestehende DB integrieren.
Nun meine unverschämte Frage: Ich habe den Fall als Beispiel-DB in den Anhang gegeben. Die derzeitige Abfrage ist natürlich falsch, weil sie mir aus den bestehenden, zweistelligen Positionsnummern nur die einstellige Version erzeugt. Aber eine sequentiell aufsteigende Nummerierung passiert damit nicht.
Wie es derzeit ist und wie es aber sein sollte, zeigt die Excel Datei. Ich möchte mich natürlich reinarbeiten und das auch verstehen. Vielleicht hilft es mir ja, wenn ich ein Beispiel mit funktionierender Abfrage als Ausgangsbasis habe. Ich wäre Euch sehr sehr dankbar für Eure Hilfe falls irgendwie möglich!

Normalo0815

Hallo dfens,

mit folgender Aktualisierungsabfrage könnte die neue Nr. in ein vorhandenes Tabellenfeld geschrieben werden (SQL-Ansicht):
UPDATE
  tblOrders
SET
  OrderPosNew = DCount( "*" , "tblOrders" , "OrderNr = " & OrderNr & " AND OrderPos < " & OrderPos ) + 1

Das Tabellenfeld OrderPosNew muss vorher bereits in der Tabelle vorhanden sein.

Wenn viele Datensätze vorhanden sind, dann kann die Ausführung der Aktualisierungsabfrage sehr lange dauern. OrderNr und OrderPos sollten deshalb indiziert sein. OrderPosNew eventuell erst nach der Aktualisierung auf indiziert umstellen (Performancegewinn bei sehr, sehr vielen Datensätzen).

Ungetestet, daher das Ergebnis stichprobenweise überprüfen.
Freundliche Grüße
Normalo0815   :)

dfens

hi normalo! suuuper! das sieht für mich schon mal nicht so kryptisch aus und ich werde das gleich morgen ausprobieren! schon mal herzlichen dank im voraus! by the way: das ist eine einmalige aktion und daher ist die performance eher sekundär. danke nochmals!

dfens

Vorschlag von Normalo getestet. Das funktioniert haargenau so wie ich es mir vorgestellt hatte. Vielen Vielen Dank!!!! Und mit diesem vergleichsweise einfacheren Ansatz kann ich nun auch weitermachen und mich da reinarbeiten und alles so anpassen wie ich es brauche. Nochmals Danke an Alle und speziell an Normalo!