Ich habe eine SQL Server-Datenbank mit Organisationen und es gibt viele doppelte Zeilen. Ich möchte eine select-Anweisung ausführen, um alle diese und die Anzahl der Dupes abzurufen, aber auch die IDs zurückgeben, die jeder Organisation zugeordnet sind.
Eine Aussage wie:
SELECT orgName, COUNT(*) AS dupes
FROM organizations
GROUP BY orgName
HAVING (COUNT(*) > 1)
Wird so etwas zurückgeben
orgName | dupes
ABC Corp | 7
Foo Federation | 5
Widget Company | 2
Aber ich würde auch gerne die Ausweise von ihnen greifen. Gibt es eine Möglichkeit, dies zu tun? Vielleicht wie ein
orgName | dupeCount | id
ABC Corp | 1 | 34
ABC Corp | 2 | 5
...
Widget Company | 1 | 10
Widget Company | 2 | 2
Der Grund dafür ist, dass es auch eine separate Tabelle mit Benutzern gibt, die mit diesen Organisationen verknüpft sind, und ich möchte sie vereinheitlichen (entfernen Sie daher Dupes, damit die Benutzer mit derselben Organisation verknüpfen, anstatt Organisationen zu betrügen). Aber ich möchte ein Teil manuell, damit ich nichts vermassle, aber ich würde trotzdem eine Anweisung benötigen, die die IDs aller betrogenen Organisationen zurückgibt, damit ich die Liste der Benutzer durchgehen kann.
quelle
isnull()
für nullfähige Spalten imon
AbschnittSie können die folgende Abfrage ausführen und die Duplikate mit
max(id)
diesen Zeilen suchen und löschen.Sie müssen diese Abfrage jedoch einige Male ausführen.
quelle
MAX( COUNT(*) ) - 1
mal ausführen , was möglicherweise noch möglich ist.Sie können es so machen:
Wenn Sie nur die Datensätze zurückgeben möchten, die gelöscht werden können (wobei jeweils einer übrig bleibt), können Sie Folgendes verwenden:
Bearbeiten: SQL Server 2000 verfügt nicht über die Funktion ROW_NUMBER (). Stattdessen können Sie Folgendes verwenden:
quelle
Die als korrekt gekennzeichnete Lösung hat bei mir nicht funktioniert, aber ich fand diese Antwort einfach großartig: Liste der doppelten Zeilen in MySql abrufen
quelle
n1.id > n2.id
verhindert die Überprüfung , dass jedes Paar zweimal angezeigt wird.Sie können dies versuchen, es ist am besten für Sie
quelle
Wenn Sie Duplikate löschen möchten:
quelle
So finden Sie doppelte Datensätze 1) Verwenden von CTE
2) Mit GroupBy
quelle
Die Datensätze mit rowum> 1 sind also die doppelten Datensätze in Ihrer Tabelle. 'Partition by' gruppiert zuerst die Datensätze und serialisiert sie dann, indem Sie ihnen die Seriennummern geben. Rownum> 1 sind also die doppelten Datensätze, die als solche gelöscht werden könnten.
quelle
Src: https://stackoverflow.com/a/59242/1465252
quelle
quelle
quelle
Sie haben mehrere Möglichkeiten für Select
duplicate rows
.Betrachten Sie für meine Lösungen zunächst diese Tabelle
Erste Lösung:
Zweite Lösung:
identity
Feld verwendenund Ende aller Lösungen verwenden Sie diesen Befehl
quelle
Ich glaube, ich weiß, was du brauchst. Ich musste zwischen den Antworten mischen und ich glaube, ich habe die Lösung, die er wollte:
Wenn Sie die maximale ID haben, erhalten Sie die ID des Republikaners und die des Originals, nach der er gefragt hat:
nur traurig, dass du es in dieser Form herausbringst
hoffe es hilft noch
quelle
Angenommen, wir haben die Tabelle 'Student' mit 2 Spalten in der Tabelle:
student_id int
student_name varchar
Jetzt möchten wir doppelte Datensätze sehen. Verwenden Sie diese Abfrage:
quelle
Ich habe eine bessere Option, um die doppelten Datensätze in einer Tabelle zu erhalten
Das Ergebnis der obigen Abfrage zeigt alle doppelten Namen mit eindeutigen Schüler-IDs und der Anzahl der doppelten Vorkommen
Klicken Sie hier, um das Ergebnis der SQL zu sehen
quelle
quelle
Ich benutze zwei Methoden, um doppelte Zeilen zu finden. Die erste Methode ist die bekannteste, bei der Gruppen von und mit verwendet werden. Die zweite Methode verwendet CTE - Common Table Expression .
Wie von @RedFilter erwähnt, ist dieser Weg auch richtig. Oft finde ich, dass die CTE-Methode auch für mich nützlich ist.
Im obigen Beispiel haben wir das Ergebnis gesammelt, indem wir das wiederholte Auftreten mit ROW_NUMBER und PARTITION BY ermittelt haben. Dann haben wir die where-Klausel angewendet, um nur Zeilen auszuwählen, deren Wiederholungszahl mehr als 1 beträgt. Das gesamte Ergebnis wird in der CTE-Tabelle gesammelt und mit der Organisationstabelle verknüpft.
Quelle: CodoBee
quelle
Versuchen
quelle