Access Datensätze mit gleicher Kunden_ID

nebeneinander schreiben.

Hallo liebe Forum-Mitglieder

Ich habe eine Tabelle mit folgenden Feldern „ID“ (autowert) „Kunden_ID“ (alphanummerisch), „Bestell_ID“ (nummerisch), „Bestellwert“ (nummerisch), „Rabatt“ (nummerisch).
Die Kunden_ID kann in der Tabelle beliebig oft vorkommen (bis zu 50 mal). Nun sollen alle Datensätze durchsucht werden und Inhalte der Datensätze mit gleicher Kunden_ID sollen nebeneinander in eine neue Tabelle geschrieben werden (Aufbau: Kunden_ID, Beslell_ID1, Bestellwert1, Rabatt1, Beslell_ID2, Bestellwert2, Rabatt2, Beslell_ID3, Bestellwert3, Rabatt3 usw.

Kleine Mustertabelle:
ID Kunden_ID Bestell_ID Bestellwert Rabatt
1 HaganSo1 157 12000 960
2 VoelklGe2 158 7000 700
3 FischerSp2 173 13000 1950
4 HaganSo1 174 400 32
5 VoelklGe2 187 12600 1260
6 HaganSo1 188 8000 640
7 VoelklGe2 189 11000 1100
8 HaganSo1 254 1200 96
9 HaganSo1 255 360 28,8

Kann mir da jemand helfen?

Im Voraus schon vielen Dank

Hallo und guten Morgen,

zu solchen Vorhaben kann ich nur sagen,es am Besten ganz bleiben zu lassen.

Eine Tabelle mit „horizontaler“ Auflistung inhaltlich sinngemäß derselben Feldern zu erstellen, ist nicht zielführend und führt gegen eine Betonmauer.

Beschäftige Dich, bevor Du irgendwie weitermachst und im Urwald landest, mit den Regeln der Tabellennormalisierung (einfach mal googlen) und erstelle eine neue DB (vermutlich sogar auch das grundlegende Konzept) unter Berücksichtigung dieser Regeln.

Viele Grüße vom Bodensee
Franz, DF6GL

Liste mit Datenbank verwechselt
Moin, Hoepfe,

das geht nicht mit Datenbankmitteln, sondern nur mit Programmierung: Sätze einlesen, entsprechende Felder zusammenpacken, zwischenspeichern, umfummeln, drucken. Also ganz simple sequentielle Verarbeitung.

Relationale Datenbanken funktionieren nur, wenn die Daten normalisiert sind, also als 1. Voraussetzung keinerlei Wiederholung von Feldern enthalten. Deshalb stellt auch kein DBMS Werkzeuge zur Verfügung, die Deine Wünsche erfüllen könnten.

Gruß Ralf

Leider kann ich es nicht bleiben lassen, weil wir die Daten in dieser Form in ein externes Programm einspielen müssen. Bisher machen wir das „Nebeneinanderschreiben“ jeden Monat händisch.

Es geht wirklich nur um den Datenexport in dieses andere Programm.

LG

Hallo Ralf,

innerhalb der eigenen DB benötige ich die Daten auch nicht in der Form. Ich brauche sie so, damit die Daten in ein anderes Programm eingespielt werden können, wo sie derzeit noch jeden Monat händisch erfasst werden.

Genau das ist das Proplem, dass ich die sequentielle Abarbeitung nicht programmieren kann. Ich habs schon mit Schleifen probiert, so dass er jeden Datensatz durchläuft. Aber wie sage ich dem Programm, dass es die Daten in ein neues Feld schreiben soll?

LG

Wie Ralf es schon angedeutet hat, braucht es dazu ein gewisses Maß an Programmierung:

Mittels nach KundenID sortiertem Recordset jeweils die DS eines Kunden durchlaufen und bei jedem Durchgang mittels zweitem Recordset die einzelnen Beträge in das entspr. Feld der Zieltabelle schreiben. Das „entspr. Feld“ könnte man mit Hilfe einer Zähler-Variablen (Index), die bei jeden Durchlauf innerhalb einer Kundengruppe passend erhöht wird, bestimmen.

Viele Grüße vom Bodensee
Franz, DF6GL

mein Problem hat sich erledigt. Ich habe diese Funktion umgeschrieben.

Public Function strVerketten(lngNummer As Long) As String
Dim rstQuelle As Recordset
Dim strSQL As String
Dim strErgebnis As String

strErgebnis = „“
strSQL = "SELECT SpalteX FROM A_Kredite WHERE Spalte1 = " & lngNummer

Set rstQuelle = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

Do While Not rstQuelle.EOF
strErgebnis = strErgebnis & rstQuelle!spalteX & "; "
rstQuelle.MoveNext
Loop
strVerketten = Trim(strErgebnis)
rstQuelle.Close
Set rstQuelle = Nothing

End Function

Danke trotzdem für die Bereitschaft, mir zu helfen.

LG

mein Problem hat sich erledigt. Ich habe diese Funktion umgeschrieben.

Public Function strVerketten(lngNummer As Long) As String
Dim rstQuelle As Recordset
Dim strSQL As String
Dim strErgebnis As String

strErgebnis = „“
strSQL = "SELECT SpalteX FROM A_Kredite WHERE Spalte1 = " & lngNummer

Set rstQuelle = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

Do While Not rstQuelle.EOF
strErgebnis = strErgebnis & rstQuelle!spalteX & "; "
rstQuelle.MoveNext
Loop
strVerketten = Trim(strErgebnis)
rstQuelle.Close
Set rstQuelle = Nothing

End Function

Danke trotzdem für die Bereitschaft, mir zu helfen.

LG