November 27, 2020, 07:02:19

Neuigkeiten:

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


Werte eines Feldes aus mehreren Datensätzen mit Duplikaten in ein neues Feld ein

Begonnen von tipmatic1035, November 08, 2020, 14:47:48

⏪ vorheriges - nächstes ⏩

tipmatic1035

Werte eines Feldes aus mehreren Datensätzen mit Duplikaten in ein neues Feld einfügen
Hallo zusammen,
in einer Beispiel-Tabelle mit Feldern (Kunde, Ware und Kaufdatum) möchte ich im Feld Kunde Duplikate zunächst darstellen und diese bis auf einen eindeutigen Wert löschen.
Dabei möchte ich alle verbleibenden Werte der anderen Felder: Ware und auch Datum (weil bei manchen Duplikaten verschiedene vorliegen) unbedingt behalten und in neuen Feldern (hier Ware und Datum) mit mehreren Werten zu jedem (eindeutigen) Kunden darstellen.
Die Duplikate kann ich mit Hilfe eines Abfrage-Assistentes zur Duplikatsuche darstellen. Wahrscheinlich wäre ich auch in der Lage, die Duplikate zu löschen. Das Weitere übertrifft meine Access-Fähigkeiten.
Mir geht's darum alle Informationen über Waren und Kaufdaten jedem Kunden zu zuordnen. Der Kunde soll dann als Primärschlüssel definiert werden damit ich mit einer anderen Tabelle verknüpfen kann.
Ich habe vor, die Kunden in Bezug auf verschiedene Waren und Kaufdaten differenzierter abzufragen/zu sortieren und/oder zu filtern.
Vielleicht ist es möglich das Problem mit einer adäquaten Excel-Tabelle zu lösen?
Über eine Antwort mit Hinweisen wäre ich sehr dankbar.
tipmatic1035

DF6GL

Hallo,

das ganze Vorhanden ist zweifelhaft.

Man generiert nicht Duplikate, um sie später mit anderer Maßnahmen wieder eindeutig zu machen.

Ich versteh das ganze Vorhaben nicht so ganz.

Was für Daten liegen schon vor und in welcher Form (Excel-Liste).  Zeige mal ein paar authentische Beispiele.

Welche Aufgabe soll die DB letztendlich haben und welche Ergebnisse erwartest Du?

Wenn Du schon Tabellen erstellt hast, zeige einen Screenshot des Beziehungsfensters.

tipmatic1035

Sehr gerne beschreibe ich mein Projekt etwas genauer. Das zuerst dargestellte Beispiel sollte das Vorgehen einfacher erklären.
Es liegen zwei Text-Dateien vor, die man in zwei Excel Tabellen, alternativ eine Access-Datenbank importieren kann, zum Beispiel.
In der ersten Text-Datei handelt sich um verschiedene Therapien, die mit einem Code bezeichnet werden. Diese Therapien sind insgesamt 17 Arten, die teils in einem ,,hierarchischen" und teils ,,gleichgeordneten" Verhältnis zueinander stehen, aber das ist nebensächlich.
Zu den Therapien gehört, vereinfacht dargestellt, eine Herzkatheteruntersuchung und die Zusatzmaßnahmen, die im Rahmen dieser Untersuchung durchgeführt wurden, wie eine Angioplastie (Gefäßerweiterung mit Ballon) und/oder eine Stentanlage, die noch weiter differenziert werden.
Die Daten (die Datensätze) wurden aus einem Informationssystem so erstellt, dass man zuerst gezielt nach bestimmten Therapien aus einem bestimmten Zeitraum (ca. 1 Jahr) suchte. Zu diesen Therapien wurden jeweils eine Aufenthaltsnummer und ein Datum der Therapiedurchführung zugefügt.
Eine Aufnahmenummer spricht über einen stationären Aufenthalt und gehört immer einem bestimmten Patienten. Die meisten Patienten erhielten im Rahmen ihres Aufenthaltes eine Untersuchung mit begleitenden Maßnahmen (in dem Fall immer ein gleiches Datum pro Aufnahmenummer). Trotzdem bei ganz vielen Patienten wurde die Untersuchung zweimal oder sogar öfters im Rahmen eines stationären Aufenthaltes durchgeführt (deshalb bei einer Aufnahmenummer mindestens zwei verschiedene Untersuchungsdaten).
Darüber hinaus kommt bei manchen Patienten vor, dass sie in dem genannten Zeitraum (ca. 1 Jahr) zweimal oder mehrmals aus dem gleichen Grund stationär behandelt werden mussten. In dem Fall wurden jeweils neue Aufnahmenummer für den Patienten vergeben. Aus der zweiten Text-Datei kann man diese Patienten anhand der Aufnahmenummer identifizieren (Patientennummer und Aufnahmenummer).
Mein Ziel ist, die Patienten und die Therapien so zusammenzufassen, dass alle Daten beliebig abgefragt werden können. D.h. die Anzahl aller Hauptuntersuchungen (Herzkatheter), die Anzahl der dazugehörigen Zusatzmaßnahmen in Bezug auf einen bestimmten Patienten und gleichzeitig den gesamten Zeitraum und Anzahl der Patienten, die die Untersuchung einmal oder häufiger in Bezug auf den stationären Aufenthalt und den gesamten Zeitraum erhielten. Die Tatsache, dass im Rahmen eines stationären Aufenthaltes erfolgte Therapiemaßnahme häufiger als einmal vorkommt, sollte dabei auch berücksichtigt werden. Außerdem sollen alle Therapiearten in die entsprechenden Altersgruppen und nach Geschlecht in dem definierten Zeitraum (ca. 1 Jahr) eingeteilt werden.
Als Beispiel füge ich einen Ausschnitt einer Excel-Tabelle mit Duplikaten (Aufnahmenummer und Untersuchungsdatum), damit das Problem vielleicht verständlicher wird.
Selbstverständlich könnte ich die Daten per Hand neu eingeben, aber bei 4500 Fällen ist es zum einen mühsam und zum anderen mit Fehler behaftet.
Vielen Dank für Eure Tipps

DF6GL

Hallo,

erstelle zunächst die Tabellenstruktur und die Beziehungen der Daten, wie sie sich in der Realität zeigen. (Von Formularen, Datenduplizierung usw. wird noch lange nicht geredet)


Beispiel als Vorschlag (minimal erforderliche Tabellen, Namen nur übermäßig ausführlich wegen Transparenz und hauptsächlich nur Schlüsselfelder dargestellt) :


tblPatienten  (alle Daten, die einen Patienten als solchen beschreiben)

PatID (PK, Autowert)
Pat_Vorname (Text)
.
Pat_GebDat (Datum/Uhrzeit).
.
.


tblTherapien (Liste aller möglichen Therapien)

TheraID (PK, Autowert)
Thera_Therapie (Text)
Thera_Code (Text)
.
.
.



(tblFachT  ??)

(tblMaßnahmen ??)




tblPatientenAufnahmen

PAID (PK,Autowert)
PA_PatID (FK zu Tabelle tblPatienten, Long)
PA_Aufnahmedatum (Datum/Uhrzeit)
.
.
.



tblPatientenAufnahmenUntersuchungen

PAUID (PK, Autowert)
PAU_PAID  (FK zu tblPatientenAufnahmen, Long)
PAU_UntersuchungsDatum (Datum/Uhrzeit)
.
.





tblPatientenAufnahmenUntersuchungenTherapien
PAUTID (PK, Autowert)
PAUT_PAUID  (FK zu tblPatientenAufnahmenUntersuchungen, Long)
PAUT_Datum (Datum/Uhrzeit)
PAUT_Info  (Memo,Langer Text)
.
.
.




Die Maßnahmen kann ich im Moment nicht genau behandeln.
Es ist unklar, ob Maßnahmen vorher definiert sind und lediglich zugeordnet werden oder ob es sich dabei um frei beschreibenden Text handelt.


Import der Excel-Daten ist ein separates Thema und ist grundsätzlich (automatisch) möglich, sofern aus der  Struktur der xls-Datei die Datenbeziehungen zu erkennen sind.


tipmatic1035

Vielen Dank für die ersten Hinweise!
Ich erstellte die ersten Tabellen, wie empfohlen, obwohl ich nicht jeden Schritt nachvollziehen kann (s. Tabelle Therapie). Aus dem Grund füge ich ein paar Erklärungen meinerseits bei.
   tblPatienten
-   Patient (es handelt sich um eine Patientennummer, die nur einem Patienten zugewiesen wird) PK
-   Nachname
-   Vornamen
-   GebDat
-   Geschlecht (nicht in der ursprünglichen Text-Datei vorhanden, es muss manuell eingetragen werden)
-   Aufnahme_nr
   tblTherapien

Dazu eine Bemerkung:
Insgesamt handelt sich um 17 Therapieformen: 1-275.0, 1-275.1, 1-275.2, 1-275.3, 1-275.4, 1-275.5, 8-837.00, 8-837.01, 8-837.K0, 8-837.K1, 8-837.K2, 8-837.M0, 8-837.M1, 8-837.M2, 8-837.M3, 8-837.M5, 8-837.M7.
Es ist hier egal, ob es sich um eine Hauptuntersuchung oder eine Zusatzmaßnahme handelt. Die Beschreibung der Therapie (eine Textbeschreibung) ist nicht notwendig, ein Code ist ausreichend. Das soll für meine späteren Abfragen ausreichen.
(Ich habe zuerst gedacht, man kann diese Therapien als ein Listenfeld/Kombinationsfeld mit Option, mehrere Werte einzugeben, oder einfach als eine Tabelle mit 17 Feldern, in der jedes Feld für eine Therapieart bestimmt wird?)
In die Tabelle Therapie habe ich noch das Datum, an dem die bestimmte Therapie durchgeführt wurde, eingeschlossen?
Dieses Datum (Datum der Therapiedurchführung) ist nämlich wichtig. Falls das Datum im Rahmen eines Aufenthaltes unterschiedlich vorkommt, ist das ein Hinweis darauf, dass während dieses Aufenthaltes (dieser Aufnahme) die allgemeine Therapie zweimal oder sogar öfters stattfand. Und diese Information ist für die Auswertung der Daten relevant. Es gibt nämlich Patienten, die nicht nur einmal während ihres Aufenthaltes eine Herzkatheteruntersuchung bekamen.
Es ergeben sich folgende Beziehungen (auch nicht alles für mich selbstverständlich):
-   ein Patient hat mindestens eine Aufnahme_Nr (d.h. es gibt Patienten, die mehr als einmal in dem definierten Zeitraum stationär aufgenommen wurden und damit mehrere Aufnahme_Nr besitzen), 1:n
-   eine oder mehrere Aufnahme_Nr gehören immer nur einem Patienten, n:1?
-   eine Aufnahme_Nr hat mehrere Therapien, 1:n (oder n:m?)
-   eine Therapie hat mehrere Aufnahme_Nr, n:m
-   zu einer Therapie gehört immer ein Datum (Untersuchungsdatum), selbstverständlich wurde jede Therapie mehrmals (an diversen Zeitpunkten) durchgeführt, 1:n?
-   Aufnahme_Nr und Datum, grundsätzlich jede Aufnahme_Nr hat ein Datum, an dem die Therapie erfolgte, aber in manchen Fällen (wo die Therapie während eines Aufenthaltes häufiger, d.h. >1x, durchgeführt wurde, müssen einer Aufnahme_Nr >1 Daten zugewiesen werden, also Beziehung 1:n, oder n:m?
Bei den weiteren Tabellen fühle ich mich unsicher und stehe einfach auf dem Schlauch. Ich bitte um einen Hinweis, vor allem in Bezug auf FK.
________________________________________Abschließend nochmals ein paar Daten, damit das Ganze vielleicht übersichtlicher ist.
Die ursprünglichen Daten befinden sich in zwei Text-Dateien
Die erste Text-Datei beinhaltet alle Aufnahme_Nr, die hier nur eindeutig erscheinen, es gibt diese insgesamt 2458. Zu diesen Aufnahme_Nr werden Patienten zugewiesen, die teilweise in dieser Datei mehrmals auftreten (weil sie mehr als einmal aufgenommen wurden, d.h. mehrmals aufgenommen wurden). Es gibt insgesamt 2195 eindeutige Patienten, 263 Patienten wurden mehr als einmal aufgenommen. Genau 207 Patienten wurden 2x, 25 Patienten 3x und 2 Patienten sogar 4x aufgenommen. 1961 Patienten sind einmal behandelt worden. (1961+2x 207+3x 25+4x 2=2458)
Die zweite Textdatei beinhaltet keine eindeutigen Werte! Die Aufnahme_Nr erscheinen insgesamt so oft, wie viele Therapien insgesamt durchgeführt wurden, d.h. in diesem Fall 4642. Es gibt 1358 Aufnahme_Nr mit einer Therapie, 206 mit zwei Therapien, 757 mit drei, 105 mit vier, 14 mit fünf, 16 mit sechs und jeweils eine Aufnahme_Nr mit sieben und acht. (1358+2x 206+3x 757+ 4x 105+5x 14 +6x 16+ 7x 1+8x 1=4642). Hier wird noch die Summe der ,,eindeutigen" Aufnhme_Nr kontrolliert: 1358+206+757+105+14+16+1+1 ergibt 2458 Aufnahme_Nr insgesamt.
1. Text-Datei beinhaltet u.a. folgende Feldnamen, die für den Import in die Access-Tabelle relevant sind:
-   Aufnahme_Nr
-   Patient
-   Nachname
-   Vornamen
-   GebDat
-   Geschlecht ist leider in der Text-Datei nicht vorhanden, so dass ich diesen Wert per Hand werde eingeben müssen...
2. Tex-Datei beinhaltet folgende relevante Feldnamen:
-   Aufnahme_Nr
-   Therapie
-   Datum (Datum der durchgeführten Therapie)
Diese Felder sind notwendig, um die notwendigen Informationen auswerten zu können.
________________________________________
Vielen Dank!
________________________________________

DF6GL

Hallo,

die Tabellen reflektieren nicht meinen Vorschlag und sind nicht korrekt aufgebaut.

Berechnungen von Datenmengen sind für den Tabellenaufbau nicht relevant.  Die Umsetzung der Logik der Datenzusammenhänge  hat Priorität.



siehe Anhang.

Die Beziehungen ergeben sich so, wie es die Realität vorgibt. 

Jede(!) Tabelle hat einen Primärschlüssel (Am Besten Autowert). In n-Tabellen ist ein darauf sich beziehender Fremdschlüssel (Datentyp Long!)  erforderlich. Über diese Schlüsselfelder wird die Beziehung erstellt. Das ist nicht anderes als eine Referenz auf die "externen" Daten. Referenzielle Integrität sorgt dafür, dass keine Inkonsistenzen ("Missverständnisse"  ) entstehen.

Eine sinnvolle Indizierung bei manchen Tabellenfeldern vermeidet "Zombie"-Datensätze, z. B. einen Patienten ohne Patientennummer oder ohne Nachname.




tipmatic1035

Vielen Dank!
Zuerst war mir das Prinzip dieser DB nicht richtig klar. Jetzt leuchtet es mir ein.
Nun müsste ich die bestimmten Werte aus den txt-Dateien (wie Patienten Nummer, Namen, Vornamen, Geburtsdatum, Aufnahme Nummer, Datum der Therapie, und Therapiebeschreibung) in die erstellten Zieltabellen einlesen. Grundsätzlich kann ich alle txt-Dateien in eine neue Access-Tabelle direkt importieren (,,eins zu eins"). Ein anderes Vorgehen (ausgewählte Werte in bestehende Tabellen einzulesen) ist mir leider nicht bekannt. Ich habe versucht, mich zu belesen. Leider stellte ich fest, dass ich ohne VBA nicht voran komme.
Ich (eher Access-Hobbyist) habe mir Access-Fähigkeiten (feste Grundlagen) selbst beigebracht, aber VBA und andere fortgeschrittene Access-Aspekte sind mir nicht ausreichend bekannt. Ich möchte hier nicht verbergen, dass ich bereit bin, mich aktiv mit dem Thema zu befassen. Aber vielleicht gibt es noch eine andere Möglichkeit oder sind die VBA-Kenntnisse in diesem Forum eine Voraussetzung?
Vielen Dank!

DF6GL

Hallo,

die VBA-Kenntnisse ist diesem Forum sind für die Importaufgabe nicht erforderlich  ;)  ;D

Da Ganze kann mit SQL-Abfragen erledigt werden.

Importiere (oder auch verknüpfe)  zunächst die ext. Dateien mit Access (im Navi-Bereich).

Dann überlege Dir, welche Daten aus der Import-Tabelle in die jeweiligen Grund-Access-Tabellen zu übertragen sind und löse das mit einer SQL-Insert-Abfrage.

Sodann erzeuge jeweils Abfragen, die die Grundtabellen mit der Importtabelle über geeignete Felder (z. die Bezeichnungen, z. B. "Vorname" und "Nachname" oder "Code" verknüpfen und die Daten in die zutreffende Tabelle übertragen.






tipmatic1035

Danke!
Ich habe verstanden und freue mich, dass ich endlich SQL lernen kann...
Ich habe in zwei neue Tabellen importiert, tbl1 und tbl2.
tbl1 (mit 2458 Datensätzen)beinhaltet:
-   Aufnahme_Nr
-   Patient
-   Nachname
-   Vornamen
-   GebDat
Bei dieser Tabelle ließ ich den PK automatisch erstellen, obwohl das Feld: Aufnahme_Nr als PK definiert werden könnte, der in dieser Tabelle eindeutige Werte hat. Ich denke es ist egal, ob ich den PKK automatisch erstellen lasse oder selbst definiere?
und tbl2 (mit 4642 Datensätzen):
-   Aufnahme_Nr
-   Therapie
-   Datum (Datum der durchgeführten Therapie)
Hier muss ich auf jeden Fall eine neuen PK automatisch definieren, weil es keine eindeutigen Werte vorliegen.
Müssen diese Importtabellen in einem Bezug zueinander stehen, oder sogar zu den Grundtabellen?
Bis jetzt habe ich einen einfachen Befehl erreicht:
z.B.
INSERT INTO tblPatienten
SELECT * FROM tbl1
Das geht aber zeigt sich hier eigentlich Inhalt der tbl1, ich weiß nicht, ob das gewollt ist
Die anderen SQL-Befehle funktionieren leider nicht, so wie ich es mir vorstelle...

DF6GL

Hallo,

bei den Import-Tabellen (tbl1 und tbl2) braucht es noch keinen Primärschlüssel, die Tabellen dienen lediglich als Datenlieferant.



Die Daten aus Tbl1 werden direkt in tblPatienten per Insert-Abfrage übernommen.

Die Daten aus tbl2 werden mit einer über Aufnahme_Nr verknüpfenden Abfrage (zwischen tblPatienten und tbl2) in tblPatientenAufnahmen übernommen.


ZitatDas geht aber zeigt sich hier eigentlich Inhalt der tbl1, ich weiß nicht, ob das gewollt ist

??

tipmatic1035

Zitat
Zitat von: tipmatic1035 am November 13, 2020, 14:15:11Das geht aber zeigt sich hier eigentlich Inhalt der tbl1, ich weiß nicht, ob das gewollt ist
Die Abfrage wurde als +! Abfrageart: Anhängen gespeichert, die man als Entwurf öffnet und dann als Tabelle und zeigen sich nur Felder aus der tbl1, keine Felder der tblPatienten...

Zitat
Zitat von: DF6GL am November 13, 2020, 15:06:41Die Daten aus tbl2 werden mit einer über Aufnahme_Nr verknüpfenden Abfrage (zwischen tblPatienten und tbl2) in tblPatientenAufnahmen übernommen.

Dann verknüpfe ich die Tabellen: tbl2 und tblPatienten über Aufnahme_Nr?
Aufnahme_Nr (aus der tbl2) zu PatID?
Das klappt leider nicht...

tipmatic1035

Ich verstehe die Zusammenhänge nicht, zwischen den beiden Tabellen (tbl2 und tblPatienten), auf deren Grundlage ich die Tabellen verknüpfen kann. Es fehlt mir noch an der Vorstellungskraft bei diesen allen Beziehungen.

DF6GL

Hallo,

ich versteh das nicht:

ZitatDann verknüpfe ich die Tabellen: tbl2 und tblPatienten über Aufnahme_Nr?
Aufnahme_Nr (aus der tbl2) zu PatID?
?? Was hat PatID hier zu suchen?



Verknüpfe tbl2.Aufnahme_Nr mit tblPatienten.Aufnahme_Nr in einer Anfügeabfrage, die die Daten in tblPatientenAufnahmen einfügt.


Es handelt sich hier um Abfrage-Verknüpfungen, nicht um Tabellenbeziehungen.






tipmatic1035

In der DB, die von Dir zugeschickt wurde fand ich in der tblPatienten kein Feld: Aufnahme_Nr, deshalb hat mich das vorher schon irritiert. Das Feld sollte da sein, damit ich verknüpfen kann? Deshalb habe ich ein neues Feld: Aufnahme_Nr in die tblPatienten eingefügt. Richtig?
Dann habe ich die beiden Tabellen verknüpft (tbl2 und tblPatienten). So
SELECT
FROM tbl1 INNER JOIN tblPatienten ON tbl1.Aufnahme_Nr = tblPatienten.Aufnahme_Nr;
dann
SELECT tbl1.Aufnahme_Nr, tbl1.Patient, tbl1.Nachname, tbl1.Vornamen, tbl1.GebDat
FROM tbl1 INNER JOIN tblPatienten ON tbl1.Aufnahme_Nr = tblPatienten.Aufnahme_Nr;
dann
INSERT INTO tblPatienten ( Aufnahme_Nr, Pat_PatNr, Pat_Nachname, Pat_Vorname, Pat_GebDat )
SELECT tbl1.Aufnahme_Nr, tbl1.Patient, tbl1.Nachname, tbl1.Vornamen, tbl1.GebDat
FROM tbl1 INNER JOIN tblPatienten ON tbl1.Aufnahme_Nr = tblPatienten.Aufnahme_Nr;
dann füge ich das in die tblPatinetenAufnahmen ein???
Es zeigen sich Meldungen, die ich nicht nachvollziehen kann...

DF6GL

Hallo,

statt Bilder wäre es besser, die Db hochzuladen.

In der Tat, die Aufnahme_Nr habe ich falsch zitiert.  Es muss über eindeutige Felder verknüpft werden, z. B. Vorname, Nachname und Geburtsdatum.