Hallo liebe Access Gemeinde,
Ich bin schon wieder am verzweifeln. :-)))
Ich habe eine Liste:
ID,Gebiet
1 A
2 A
3 A
4 B
5 B
6 A
7 A
8 B
Nun brauche ich eine Nummerierung:
ID,Gebiet, Nummer
1 A 1
2 A 1
3 A 1
4 B 2
5 B 2
6 A 3
7 A 3
8 B 4
Hat jemand eine Idee?
Vielen lieben Dank.
Gruss Sainfeld
Hallo,
warum fragst Du in 2 Foren.
Das verstößt gegen die Regeln.
http://www.office-loesung.de/p/viewtopic.php?f=167&t=785306
Zu Deiner Frage:
FAQ 3.11 Laufende Nummer/Summe in Abfragen (http://www.donkarl.com?FAQ3.11)
Hallo Klaus,
In zwei Foren deshalb, weil das andere Forum hier derzeit nur ein Provisorum ist.
Nun zu Deiner Antwort. Schaue bitte meine Liste GENAU an. DonKarls Beispiele bieten dafür leider keine Lösung.
Nach DonKarls Beispiel wäre meine Liste so:
1 A 1
2 A 2
3 A 3
4 B 1
5 B 2
6 A 1
7 A 2
8 B 1
Ich brauche es aber über die Gruppe:
1 A 1
2 A 1
3 A 1
4 B 2
5 B 2
6 A 3
7 A 3
8 B 4
Hast eine Idee?
VG
Sainfeld
Ist die Tabelle in dieser Darstellung vollständig oder nur "modelliert"?
Gemäß der vorliegenden Beschreibung macht es nur Sinn, die Tabelle in ein Recordset zu fassen und per einfacher Schleife die Nummern in ein vorhandenes Feld einzutragen, selbstredend mit jeweiliger Prüfung auf den Vorgängerdatensatz.
Ggf. macht es aber auch Sinn, die eigentliche Bedeutung und Verwendung dieser Nummern zu kennen - desweilen soll es ja andere Wege zu einem Ziel geben, die dann ganz anders und gar einfacher sind.
Eine schöne Aufgabenstellung, die mit dem antiquietren SQL-Dialekt von Access jedoch kaum performant zu lösen sein wird - es sei denn, man nutzt temporäre Tabellen, zum Speichern von Zwischenergebnissen. Hier würde ich eher mittels Recordset-Schleife die Daten in ein Zielfeld eintragen. Eine Lösung mit mordernem SQL-Dialekt kann im <dbfiddle> (https://dbfiddle.uk/?rdbms=postgres_11&fiddle=5e7d2a9996ab35d4a6882e0167fe59ec) eingesehen werden (vielleicht hast Du ja einen Datenbank-Server als Backend vorliegen).
@Lachtaube
das sieht gut aus. :) Ich habe jedoch keine Ahnung, wie ich das in meine Access Datenbank implementieren kann. Ich habe leider keinen Datenbankserver als Backend.
@ebs17
Die Darstellung ist modelliert. Die echte Tabelle (257.000 Datensätze) sieht etwa so aus:
ID; Datum; strName; strGebiet; intNum
1 ; 03.12.2016; Klaus RO-121
2. ; 04.01.2017; Klaus RO-121
3 ; 06.02.2017; Klaus RO-121
4 ; 03.03.2017; Heinz RO-121
5 ; 04.04.2017; Heinz RO-121
6 ; 07.05.2017; Klaus RO-121
7 ; 08.06.2017; Heinz RO-121
8 ; 09.06.2017; Heinz RO-121
Am Ende benötige ich eine Tabelle, die so aussieht:
ID(Pk); DatumAnfang; DatumEnde; strName; strGebiet
1; 03.12.2016; 06.02.2017; Klaus RO-121
2; 03.03.2017; 04.04.2017; Heinz RO-121
3; 07.05.2017; 07.05.2017; Klaus RO-121
4; 08.06.2017; 09.06.2017; Heinz RO-121
Nun war meine Idee, die Tabelle hoch zu nummerieren:
ID; Datum; strName; strGebiet; intNum
1 ; 03.12.2016; Klaus RO-121 1
2. ; 04.01.2017; Klaus RO-121 1
3 ; 06.02.2017; Klaus RO-121 1
4 ; 03.03.2017; Heinz RO-121 2
5 ; 04.04.2017; Heinz RO-121 2
6 ; 07.05.2017; Klaus RO-121 3
7 ; 08.06.2017; Heinz RO-121 4
8 ; 09.06.2017; Heinz RO-121 4
um in einer Abfrage nach dem Max Wert und MinWert des Datums unter der Bedingung von intNum (aufsteigend) diese Tabelle zu generieren.
Vielen Dank.
Wie schon Lachtaube schreibt mit Jet SQL nur mit einem Kopfstand umzusetzen.
Der einfache Weg: Daten in ein Recordset laden, per VBA die notwendigen Werte ermitteln und in eine Tabelle schreiben.
In VBA sollte folgende Schleife zum Ziel führen.
Const QRY As String = _
"SELECT strName, intNum FROM DerTabellenname ORDER BY ID"
Dim n As Long
Dim p As String
With DBEngine(0)(0).OpenRecordset(QRY, dbOpenDynaset)
Do Until .EOF
If n = 0 Then
n = 1
p = !strname
ElseIf !strname <> p Then
n = n + 1
p = !strname
End If
.Edit
!intNum = n
.Update
.MoveNext
Loop
.Close
End With
@ markus888
@ lachtaube
vielen lieben Dank. Ich werde den Code am Montag gleich mal ausprobieren und danach berichten.
Merci schon mal und ein schönes Wochenende.
LG Sainfeld