Se si utilizza SQL Server 2005 o versione successiva (e i tag per la domanda indicano SQL Server 2008), è possibile utilizzare le funzioni di classificazione per restituire i record duplicati dopo il primo se l'utilizzo dei join è meno desiderabile o poco pratico per qualche motivo. L'esempio seguente mostra questo in azione, dove funziona anche con valori null nelle colonne esaminate.
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
Si noti dopo aver eseguito questo esempio che il primo record di ogni "gruppo" è escluso e che i record con valori null sono gestiti correttamente.
Se non si dispone di una colonna disponibile per ordinare i record all'interno di un gruppo, è possibile utilizzare le colonne di partizione come colonne di ordine.