Ich verwende SQL Server 2008. Ich habe eine Tabelle
%Vor%... und viel mehr Spalten, die für meine Fragen keine Rolle spielen.
Spalte Kundennummer ist pk. Ich versuche, doppelte Werte und einige Unterschiede zwischen ihnen zu finden.
Bitte helfen Sie mir, alle Zeilen zu finden, die dasselbe haben
1) Feld1, Feld2, Feld3, Feld4
2) Nur 3 Spalten sind gleich und eine davon ist nicht (außer Zeilen aus Liste 1)
3) nur 2 Spalten gleich und zwei davon nicht (außer Zeilen aus Liste 1 und Liste 2)
Am Ende habe ich 3 Tabellen mit diesen Ergebnissen und zusätzliche groupId, die für eine Gruppe von ähnlichen gleich sein werden (Zum Beispiel, für 3 Spalte gleich, Zeilen, die 3 gleiche Spalten haben gleich ist eine separate Gruppe )
Danke.
Am einfachsten wäre es wahrscheinlich, eine Stored Procedure zu schreiben, die über jede Kundengruppe mit Duplikaten iteriert und die entsprechenden pro Gruppennummer einfügt.
Allerdings habe ich darüber nachgedacht und Sie können dies wahrscheinlich mit einer Unterabfrage tun. Hoffentlich habe ich es nicht komplizierter gemacht, als es sollte, aber das sollte dir das bringen, wonach du suchst für die erste Dubletten-Tabelle (alle vier Felder). Beachten Sie, dass dies noch nicht getestet wurde. Es könnte daher ein wenig optimiert werden.
Im Grunde genommen erhält es jede Gruppe von Feldern, wo es Duplikate gibt, eine Gruppennummer für jedes, und erhält dann alle Kunden mit diesen Feldern und weist dieselbe Gruppennummer zu.
%Vor%Die anderen sind etwas komplizierter, da Sie die Möglichkeiten erweitern müssen. Die Dreifeldgruppen wären dann:
%Vor%Hoffentlich bringt dies die richtigen Ergebnisse und ich werde die letzte als Übung verlassen. :-D
Hier finden Sie eine praktische Abfrage zum Suchen von Duplikaten in einer Tabelle. Angenommen, Sie möchten alle E-Mail-Adressen in einer Tabelle finden, die mehrfach vorhanden sind:
%Vor%Sie können diese Technik auch verwenden, um Zeilen zu finden, die genau einmal vorkommen:
%Vor% Ich bin mir nicht sicher, ob Sie eine Gleichheitsprüfung für verschiedene Felder benötigen (wie field1 = field2).
Sonst könnte das ausreichen.
Bearbeiten
Fühlen Sie sich frei, die Testdaten anzupassen, um uns mit Eingaben zu versorgen, die nach Ihren Angaben eine falsche Ausgabe liefern.
Testdaten
%Vor%Alle gleich
%Vor%Ein Feld anders
%Vor%Sie können einfach so etwas schreiben, um doppelte Einträge zu zählen, ich denke, es funktioniert:
%Vor%Genießen
Es gibt eine saubere Methode, dies mit CUBE()
zu tun, die nach allen möglichen Kombinationen von Spalten
Die Zahlen (0,1,2,4,8,3,5,6,9,10,12) sind nur die Bitmasken (0000,0001,0010,0100, ..., 1010,100) von die Gruppen, die uns wichtig sind - diejenigen mit 4, 3 oder 2 Übereinstimmungen.
Dann verbinden Sie dies mit der ursprünglichen Tabelle mit einer Technik, die NULL in #duplicate_rows als Platzhalter behandelt
%Vor%Tags und Links sql-server sql-server-2008 duplicates