T-SQL: Löschen Sie redundante Zeilen und behalten Sie einzelne Zeilendatensätze bei
Die Aufrechterhaltung der Datenintegrität ist von entscheidender Bedeutung und die Beseitigung doppelter Zeilen ist ein entscheidender Schritt. In diesem Fall kam es aufgrund eines Dateneingabefehlers zu doppelten Datensätzen. Ihr Ziel ist es, diese redundanten Zeilen zu entfernen, aber Sie müssen präzise vorgehen und sicherstellen, dass Sie ein einzelnes Duplikat behalten.
Lösung: Verwenden Sie CTE und ROW_NUMBER()
In SQL 2005 oder höher können Sie einen allgemeinen Tabellenausdruck (CTE) mit der ROW_NUMBER() OVER-Klausel verwenden, um Ihre Ziele zu erreichen. Der CTE fungiert als Filter und isoliert relevante Daten, während die Funktion ROW_NUMBER() jeder Zeile in einer vordefinierten Partitionsgruppe (in diesem Fall der Schlüsselspalte) eine Sequenznummer zuweist.
Mit dieser Technik können Sie doppelte Zeilen basierend auf Ihren gewünschten Kriterien isolieren. Durch Anhängen einer WHERE-Klausel, die eine Bedingung enthält, die prüft, ob die Zeilennummer größer als 1 ist, können Sie die redundanten Zeilen lokalisieren und löschen.
Leistung
<code class="language-sql">WITH cte AS ( SELECT [foo], [bar], row_number() OVER(PARTITION BY [foo], [bar] ORDER BY [baz]) AS [rn] FROM [TABLE] ) DELETE FROM cte WHERE [rn] > 1</code>
Anpassungsoptionen
Die ORDER BY-Klausel im CTE bietet Flexibilität beim Sortieren von Zeilen. Wenn Ihr Ziel darin besteht, die neuesten Zeilen beizubehalten, ordnen Sie die Ergebnisse in absteigender Reihenfolge nach der relevanten Datums-/Uhrzeitspalte (z. B. ORDER BY [baz] DESC). Bedenken Sie, dass die Auswahl der Sortierkriterien vollständig an Ihre spezifischen Bedürfnisse angepasst werden kann.
Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Zeilen in T-SQL löschen und gleichzeitig eine Instanz behalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!