Wenn Sie SQL Server 2005 oder höher verwenden (und die Tags für Ihre Frage geben SQL Server 2008 an), können Sie mithilfe von Ranking-Funktionen die doppelten Datensätze nach dem ersten zurückgeben, wenn die Verwendung von Joins aus irgendeinem Grund weniger wünschenswert oder unpraktisch ist. Das folgende Beispiel zeigt dies in Aktion, wo es auch mit Nullwerten in den untersuchten Spalten funktioniert.
create table Table1 (
Field1 int,
Field2 int,
Field3 int,
Field4 int
)
insert Table1
values (1,1,1,1)
, (1,1,1,2)
, (1,1,1,3)
, (2,2,2,1)
, (3,3,3,1)
, (3,3,3,2)
, (null, null, 2, 1)
, (null, null, 2, 3)
select *
from (select Field1
, Field2
, Field3
, Field4
, row_number() over (partition by Field1
, Field2
, Field3
order by Field4) as occurrence
from Table1) x
where occurrence > 1
Beachten Sie nach dem Ausführen dieses Beispiels, dass der erste Datensatz aus jeder "Gruppe" ausgeschlossen ist und dass Datensätze mit Nullwerten ordnungsgemäß behandelt werden.
Wenn Sie keine Spalte zum Ordnen der Datensätze innerhalb einer Gruppe zur Verfügung haben, können Sie die Spalten nach Partition als Spalten nach Reihenfolge verwenden.