Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Daten in Gruppen nummerieren

Begonnen von Sainfeld, November 15, 2018, 22:28:08

⏪ vorheriges - nächstes ⏩

Sainfeld

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

MzKlMu

Gruß Klaus

Sainfeld

#2
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

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

Lachtaube

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> eingesehen werden (vielleicht hast Du ja einen Datenbank-Server als Backend vorliegen).
Grüße von der (⌒▽⌒)

Sainfeld

#5
@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.

markusxy

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.

Lachtaube

#7
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
Grüße von der (⌒▽⌒)

Sainfeld

@ 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