2016-07-10 3 views
0

Ich bin ein wenig Neuling in MS Access, aber ich habe begonnen, einige Validierung der Daten bei der Arbeit und dachte, es war Zeit zu einem vereinfachten Weg zu gehen es.Suche nach Nicht-Übereinstimmungen in der gleichen Tabelle in MS Access

Zum ersten Mal Posting, ich habe ein Problem „nur“ Anzeige versucht, nicht passende Werte innerhalb der gleichen Tabelle dh Fehler

Ich habe eine Tabelle (Abfrage), wo ich Mitarbeiter Details einen von einer Datenbank und eins von einander. Beide haben die gleichen Informationen in ihnen, aber es gibt einige Details in beiden, die nicht korrekt sind und aktualisiert werden müssen. Als Beispiel siehe unten:

Table1 
Employee ID Surname EmpID Surname1 
123456789 Smith 123456789 Smith 
654987321 Daniels 654987321 Volate 
987654321 Hanks 987654321 Hanks 
741852963 Donald 741852963 Draps 

Nun, was ich identifizieren wollen, ist die, die nicht übereinstimmen mit „Nachname“ und „Surname1“

Dies sollte Employee ID

741852963 Donald 741852963 Draps 
654987321 Daniels 654987321 Volate 

Ich werde das an eine Fehler-Tabelle anhängen, mit der ich alle Fehler auflisten kann, wo Werte nicht übereinstimmen.

Was ich versucht habe, ist folgendes:

Field: Matches: IIf([Table1].[Surname]<>[Table1].[Surname1],"Yes","No") 

Dies scheint nicht wie alle der Ergebnisanzeige als Ja zu arbeiten und ich weiß für eine Tatsache, dass es Unstimmigkeiten gibt.

Weiß jemand, was oder wie das zu tun ist? Stellen Sie bei Bedarf Fragen.

Dank

UPDATE

Ok ich denke, es könnte besser sein, wenn ich Sie alle tatsächlichen Namen der Spalten gab. Ich dachte, es wäre einfacher, es zu vereinfachen, aber vielleicht nicht.

Assignment PayC   HRIS Assignment No WAPayCycle 
12345678 No Payroll  12345678   Pay Cycle 1 
20001868 SCP Pay Cycle 1 20001868   SCP Pay Cycle 1 
20003272-2 SCP Pay Cycle 1 #Error 
20014627 SCP Pay Cycle 1 20014627   SCP Pay Cycle 1 

Also das gibt und Idee von dem, was ich tue und die möglichen Fehler, die ich für widersprechen muss. Der erste hat einen Mismatch, also erwarte ich das zu Error. Die dritte Zeile hat einen Null-Wert in einer Spalte und eine Null in einer anderen Spalte, jedoch ist eine #Error, wo die andere gerade leer ist. Der Rest ist abgestimmt.

LINK TO SCREEN DUMPS https://drive.google.com/open?id=0B-5TRrOketfyb0tCbElYSWNSM1k

+0

Gibt 'SELECT * FROM Tabelle1 WHERE [Nachname] <> [Nachname1]' auch alle Zeilen zurück? Dann sehen die Nachnamen aus einer Tabelle vielleicht nur identisch mit den anderen aus, vielleicht sind sie mit Leerzeichen oder Tabs aufgefüllt. – Andre

+0

Sie haben möglicherweise * [Leerzeichen] (http://www.techrepublic.com/article/white-space-the-next-internet-disruption-10-things-to-know/) * in Ihren Daten. Verwenden Sie die ['Trim'-Funktion] (https://support.office.com/en-us/article/LTrim-RTrim-and-Trim-Functions-E340CED1-67DF-435F-B078-1527A4EDDEA2), um diese zusätzlichen Zeichen zu bereinigen aus den Daten: 'SELECT * FROM Tabelle1 WHERE Trim ([Nachname]) <> Trim ([Name1])' – marlan

+0

Gut so dumm wie ich bin, haben Sie völlig Recht. Ich hatte Leerzeichen am Ende meines Textes. Ich habe gerade die Abfrage, um Leerstellen zu entfernen. Nur Problem ist jetzt, ich will nur diejenigen anzeigen, die nicht übereinstimmen und müssen auch Null-Werte identifizieren. – Bassik

Antwort

1

Diese Option Fehler ein NULL-Werte in [HRIS Assignment No] Griffe:

SELECT * , IIf([Assignment]<>IIf(IsError([HRIS Assignment No]),"",Nz([HRIS Assignment No]​),""),"Yes","No") As Err 
FROM [pc look up] 
WHERE [Assignment]<>IIf(IsError([HRIS Assignment No]),"",Nz([HRIS Assignment No]​),"") 
+0

Dies gibt mir eine Abweichung des Datentyps im Kriterienausdruck. Übrigens brauche ich die Trimm-Funktion nicht, da ich die ursprüngliche Abfrage aus der Quelltabelle angepasst habe. – Bassik

+0

Yup, 'Trim()' kann keinen Nullwert empfangen oder zurückgeben. Ich werde meine Antwort beheben – marlan

+0

Jetzt werden weiße Leerzeichen und Nullen in * leere Zeichenfolge * ('" "') konvertiert, die mit anderen String-Werten verglichen werden kann – marlan

0

Dies sollte funktionieren:

SELECT * 
FROM Table 
WHERE EmployeeID = EmpID 
AND Surname <> Surname1 
OR Len(Nz(Surname,'')) = 0 
OR Len(Nz(Surname1,'')) = 0 

Mit freundlichen Grüßen

Rene

+0

Das gibt mir auch einen Datentyp Fehler. Ich bin nicht absolut sicher, dass ich das richtig mache. Wie kommt es, dass ich die ganze Zeit Datentypenfehler erhalte? – Bassik

+0

Riecht wie ein datenbezogenes Problem. Entfernen Sie den Datensatz, der #Error für die HRIS-Zuordnung liest, und führen Sie die Abfrage erneut aus. Zeigt es immer noch den Datentyp Mismatch-Fehler? – Rene

+0

Der Versuch, den #Error zu lösen. Ich kann es auf der HRIS Assignment No reparieren, aber auf WAPayCycle wird es nicht beheben. Müde IsError() aber noch nichts. – Bassik

0

In Ihrer Frage geben Sie "eins aus einer Datenbank und eins aus einer anderen".
Angenommen, Sie beginnen mit zwei Tabellen (Sie haben uns eine Abfrage gezeigt, die die vier Felder miteinander verbindet?) dann würde diese Abfrage funktionieren:

SELECT T1.[Employee ID] 
     ,T1.Surname 
     ,T2.EmpID 
     T2.Surname1 
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.[Employee ID] = T2.EmpID AND 
              T1.Surname <> T2.Surname1 
ORDER BY T1.[Employee ID] 

Ein INNER JOIN gibt Ihnen das Ergebnis, das Sie suchen. Ein LINKER JOIN zeigt alle Werte in Tabelle1 (Aliasing als T1) und nur diejenigen, die in Tabelle2 übereinstimmen (Aliasing als T2) - die anderen Werte sind NULL, ein RECHTER JOIN zeigt das Gegenteil.

+0

Dies ist eine Abfrage in Access aus zwei separaten Tabellen und ich versuche, diese Funktion auf die Abfrage selbst auszuführen. Es gibt also keine aktuelle Datenbank, sondern nur die Informationen aus einer Datenbank und eine aus einer anderen. Kompilieren Sie es in eine Abfrage mit Access, aber jetzt möchte ich diese Validierung durchführen. – Bassik

+0

In diesem Fall ändern Sie einfach "Table2" in "Table1" in der Abfrage und es wird sich selbst beitreten und die gleichen Ergebnisse geben. –