dr.cornwallis
Goto Top

Access Tabellen vergleichen, Abweichungen ausgeben

Liebe Gemeinde,

ist es mit einer Access Abfrage möglich, den Unterschied zweier Tabellen auszugeben(ohne VBA Code)?
Ich hätte jetzt mit einer "Inkonsistenzsuche" probiert, diese erkennt aber nur fehlende Objekte bzw. bräuchte ich dann 2 Abfragen zum "Gegencheck", was etwas umständlich ist.
Die Abfrage soll die Unterschiede zwischen einer konstanten und einer Variablen Tabelle(wöchentlicher SAP Import) ausgeben.
Ich muss damit prüfen, ob es neue Mitarbeiter bzw. ob es ausgeschiedene Mitarbeiter gibt, diese sollen dann in einer Abfrage erscheinen.

Hab ich da Chancen ohne VBA, bzw. wie würde der Code dazu aussehen?


Danke für eure Hilfe!

Content-Key: 300325

Url: https://administrator.de/contentid/300325

Printed on: April 16, 2024 at 11:04 o'clock

Member: Biber
Biber Mar 29, 2016 updated at 13:45:56 (UTC)
Goto Top
Moin Dr.Cornwallis,

natürlich kannst du mit SQL-Mitteln zwei Tabellen übereinanderlegen und feststellen, was auf der einen, der anderen oder beiden übersteht. Für Mengen-Operationen ist diese Abfragesprache ja geschrieben worden.

Wenn du uns wenigstens noch einen klitzekleinen Hinweis gibst, wie denn eine Tabelle "Mitarbeiter" aufgebaut ist (was ist der identifizierende Schlüssel?) und was dein Ausgabeergebnis sein soll, dann können wir können wir mit dem Bregensturm beginnen.

Grüße
Biber
Member: Dr.Cornwallis
Dr.Cornwallis Mar 29, 2016 at 15:18:30 (UTC)
Goto Top
Moin Herr Biber,

der identifizierende Schlüssel wird die Personalnummer werden.
Diese ist in beiden Tabellen vorhanden und die beiden Tabellen sind komplett gleich aufgebaut.
Das Ergebnis soll eine Abfrage sein, die jegleiche Veränderungen zwischen SAP Auszug und der "Personal" Tabelle ausgibt.
Somit wird angezeigt, welche Mitarbeiter neu bzw. ausgeschieden sind.
Der SAP Auszug ist nichts weiter als eine verlinkte Excel Tabelle in Access, sprich Access soll mit einer Abfrage schauen ob die verlinkte Excel Tabelle vom Table "Personal" abweicht und diese Abweichungen ausgibt.
Ich bin ein absoluter Neuling in diesem Gebiet und verstehe größtenteils noch Bahnhof, muss es aber machen da ich der einzige IT Techniker im Unternehmen bin face-smile.

Grüße

Dr
Member: Biber
Biber Mar 29, 2016 updated at 16:09:28 (UTC)
Goto Top
Moin Dr.Cornwallis,

in SQL gibt es viele Möglichkeiten, diese zwei Mengen zu vergleichen.
Bitte befrage auch mal eine Suchmaschine nach Begriffen wie UNION, JOINs, ALIASen oder dem IN-Operator.

Eine der vielen Möglichkeiten wäre
SELECT alt.Personalnummer , alt.Vorname, alt.Nachname, "nicht mehr dabei" as Status   
   FROM Personal AS alt 
   LEFT JOIN deinDailyExcel AS neu on alt.PeronalNummer=neu.Personalnummer
   WHERE neu.Personalnummer IS NULL
UNION ALL
SELECT neu,Personalnummer , neu.Vorname, neu.Nachname, "neu dabei" as Status   
   FROM deinDailyExcel AS neu 
   LEFT JOIN Personal AS alt on alt.PeronalNummer=neu.Personalnummer
   WHERE alt.Personalnummer IS NULL

Grüße
Biber
Member: Dr.Cornwallis
Dr.Cornwallis Mar 29, 2016 at 17:10:34 (UTC)
Goto Top
Hi!

Mit deinem Code kann ich den Abgleich auf einem SQL Server realisieren(wenn ich das richtig verstanden habe)?

Danke für deine Hilfe!face-smile
Member: Biber
Solution Biber Mar 29, 2016 at 17:29:11 (UTC)
Goto Top
Moin Dr. Cornwallis,

mit meiner Skizze kannst du erstmal bei jeder handelsüblichen Suchmaschine nach den neuen Vokabeln suchen, um eine ungefähre Ahnung zu bekommen, wie dieses SQL-Zeugs wohl tickt.

Wenn du dann nach einer Viertelstunde meinst "Aha - jezz' versteh' ich, watt der Biber da machen will..."
-> dann kannst du das angepasste Statement (deine Tabellen heissen vielleicht etwas anders und wie ich SAP kenne, heissen "Vorname" und "Name" bestimmt "VNAM" und NNAM") auf alles loslassen, was ein paar Brocken SQL spricht oder versteht.

Z.B. auf dein Access..

Grüße
Biber
P.S. Die Abkürzung SAP heisst auch nicht Software aus Pakistan.
Pakistani sprechen besseres Deutsch.
Member: ukulele-7
ukulele-7 Mar 30, 2016 at 06:03:36 (UTC)
Goto Top
Also zunächst mal wäre ein anderer SQL Server (MS SQL, Oracle oder PostgreSQL) besser in der Lage Tabellen zu vergleichen, da diese z.B. EXCEPT anbieten. EXCEPT vergleicht bei SQL den vollständigen Datensatz. Ist auch nur ein Atribut unterschiedlich wird der ganze Datensatz angezeigt.

Das kann man natürlich nachbauen, hier mal ein Beispiel:
SELECT A.x FROM A
EXCEPT
SELECT B.x FROM B
entspricht
SELECT A.x FROM A 
LEFT JOIN B 
ON A.x = B.x 
WHERE B.x IS NULL
Sobald aber mehr Spalten zum Vergleich hinzukommen müssen diese auch in der JOIN-Bedingung aufgeführt werden, das kann sehr lästig sein. Bibers Beispiel zeigt dir zunächst mal nur Datensätze, die in der einen Tabelle neu sind und Datensätze, die in der neuen Tabelle nicht mehr vorhanden sind. Das kann aber nur ein Anfang sein denn eine Veränderung im neuen Datensatz wäre noch nicht dabei.

Du solltest dir zunächst klar sein welches Format deine Änderungsübersicht haben soll / muss. Soll die ganze Zeile ausgegeben werden wenn ein Atribut anders ist dann lohnt sich eventuell der Einsatz eines richtigen SQL Servers. Wenn wirklich jedes Atribut das sich ändert einzeln genannt werden soll, ist sowieso Fleißarbeit angesagt.