Ich versuche 35 Jahre Daten in Access von Excel zu bringen. Ein Teil des Reinigungsprozesses ist sicherzustellen, dass die einzigartigen IDs, die wir für die gefangenen Tiere verwendet haben, für jedes Tier einzigartig sind.MS-Access 2007: Abfrage aller Datensätze, die Personen zugeordnet sind, die mindestens einen Datensatz haben, der die angegebenen Kriterien erfüllt
Um dies zu tun, möchte ich sicherstellen, dass jedes Tag nur eine "1st capture" zugeordnet ist. Ich kann nicht einfach nach Duplikaten suchen, weil Tiere oft 2-5 mal gefangen werden.
Jetzt habe ich es geschafft, diese Abfrage zu erstellen, die ID-Codes mit mehreren Capcode "1" Datensätze hochzieht. (Das Zeug über id.type ist, weil diese nur wichtig für die Tiere ist, die eine bestimmte Art und Weise markiert wurden)
SELECT [Capture Table].id_code, [Capture Table].capcode,
[Capture Table].id_type, [Capture Table].capture_id
FROM [Capture Table]
WHERE ((([Capture Table].id_code) In (SELECT [id_code]
FROM [Capture Table] As Tmp GROUP BY [id_code],[capcode] HAVING Count(*)>1 And [capcode] = [Capture Table].[capcode]))
AND (([Capture Table].capcode) Like "1")
AND (([Capture Table].id_type) Like "NP" Or ([All Info Query].id_type)="E" Or ([Capture Table].id_type)="T"))
ORDER BY [Capture Table].id_code, [Capture Table].capcode;
Nun, das gibt mir die alle Tag-Nummern, die Probleme sind. Jetzt möchte ich sie mit all ihren zugehörigen Informationen (einschließlich Umfrage-Informationen aus Tabellen, die sich auf die Captures einer bestimmten Umfrage beziehen) ziehen UND alle Datensätze mit diesen ID-Codes zurückgeben (so ändere ich nicht nur die erste Aufnahme und vermisse sie nachfolgende Rückeroberungen).
Dies gibt die Datensätze (Sitzung + Header + Capture Query zieht nur alle Umfrage Informationen zusammen mit den zugehörigen Captures, so wie ich um den "mehrdeutigen Outer-Join-Fehler" bekam und kann immer noch das Datum & Website Info):
SELECT DISTINCTROW [Session+Header+Capture Query].Year, [Session+Header+Capture Query].site, [Session+Header+Capture Query].Date, [Session+Header+Capture Query].trappers,
[Session+Header+Capture Query].id_type, [Capcode 1 Repeat subQuery].id_code, [Session+Header+Capture Query].age, [Session+Header+Capture Query].sex, [Session+Header+Capture Query].repro,
[Session+Header+Capture Query].tail_mm, [Session+Header+Capture Query].capcode
FROM [Capcode 1 Repeat subQuery] LEFT JOIN [Session+Header+Capture Query] ON [Capcode 1 Repeat subQuery].id_code = [Session+Header+Capture Query].id_code;
So gibt dies jetzt alle Datensätze zurück, die den "Problem-ID-Codes" zugeordnet sind. Sie werden jedoch auch dupliziert (obwohl eindeutige Datensätze aktiviert sind) und nicht aktualisierbar.
Lange Rede, kurzer Sinn, wie kann ich Duplikate mit bestimmten Kriterien auswählen (doppelte ID-Codes mit Capcode = 1) und alle Datensätze mit diesen ID-Codes zurückgeben, nicht nur diejenigen mit Capcode = 1? Während meine Abfrage noch aktualisierbar ist?
Es ist wie die Art und Weise scheint dies zu tun wäre, um die Unterabfrage zu entfernen und setzt nur die Auswahlfunktion in das Haupt, aber ich "bin nicht sicher, wie das zu tun, und die Capcode Kriterien in dem klappen.
Vielen Dank für die Hilfe!
PS. ich bin immer noch nur SQL lernen, so kleine Erklärungen in Antworten zusammen mit Code sind wirklich sehr hilfreich, sonst ich kopieren und einfügen und versuchen, einfach nicht zu brechen.
Da eine Abfrage als Quelle für eine andere Abfrage verwendet werden kann, versuche ich, komplexe Logik in mehrere einfachere Abfragen zu trennen. In diesem Fall würde ich eine Abfrage schreiben, um die Problem-IDs zu identifizieren, und dann dieses Ergebnis in einer zweiten Abfrage verwenden, um alle zugehörigen Datensätze mit dieser ID zu erhalten. –
Das habe ich. Es ist jedoch nicht aktualisierbar, was ein Problem darstellt, da ich die Datensätze hochfahre, weil sie geändert werden müssen, und es gibt über tausend davon mit über 300 IDs. Ich wollte nicht für jede ID selbst filtern, um sie zu aktualisieren. Aber ich denke, ich habe es herausgefunden, aber du hast Recht, meine Antwort war nicht schön und sah ziemlich kompliziert aus. Ich poste es zum Teilen. – user2934942