Löschen Sie doppelte Datensätze in SQL Server basierend auf bestimmten Feldern
Angenommen, es gibt eine Tabelle mit dem Namen „Employee“, die eine Spalte mit dem Namen „EmployeeName“ enthält. Die Aufgabe besteht darin, redundante Datensätze basierend auf dem Feld „EmployeeName“ zu löschen und die folgenden Daten zu erhalten:
EmployeeName |
---|
Anand |
Anil |
Dipak |
Wie kann ich dies mit einer einzigen Abfrage mithilfe von TSQL in SQL Server erreichen?
Lösung mit Fensterfunktionen:
Um dieses Problem zu lösen, ist die Fensterfunktion eine praktikable Methode. Mit Fensterfunktionen können Sie Vorgänge für eine Reihe von Zeilen innerhalb einer durch die OVER-Klausel definierten Partition ausführen. In diesem Beispiel wird die Partition durch die Spalte „EmployeeName“ definiert.
Die folgende Abfrage identifiziert und entfernt doppelte Datensätze basierend auf dem Feld „EmployeeName“:
<code class="language-sql">delete x from ( select *, rn=row_number() over (partition by EmployeeName order by empId) from Employee ) x where rn > 1;</code>
Erklärung:
Gelöschte Datensätze anzeigen:
Um eine Vorschau der Datensätze anzuzeigen, die gelöscht werden, ohne die Löschanweisung tatsächlich auszuführen, verwenden Sie die folgende Auswahlabfrage:
<code class="language-sql">select * from ( select *, rn=row_number() over (partition by EmployeeName order by empId) from Employee ) x where rn > 1;</code>
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze in SQL Server basierend auf einem bestimmten Feld mithilfe einer einzelnen Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!