2012-03-23 10 views
5

Questo il nome del mio tavolo Result_SimulEliminare le righe duplicate e mantenere una riga

Questo è il valore

 Pk FkIdResult FkIdSimul 
     1  43   1244 
     2  43   1244 
     3  52   1244 
     4  52   1244 

Come mantenere solo continuare a righe Pk = 1 e Pk = 3 ed eliminare Pk = 2 e Pk = 4

Grazie per l'aiuto.

Im non veramente bene in Tsql

Frank

+0

Quale versione di sql-server è attiva? –

+0

sql server 2008 – FrankSharp

risposta

12

È possibile utilizzare row_number per dare ad ogni duplicare un numero di ascendente, e quindi eliminare il 2 ° e duplicati più elevati:

delete tbl 
from (
     select row_number() over (partition by FkIdResult, FkIdSimul 
            order by Pk desc) as rn 
     ,  * 
     from YourTable 
     ) tbl 
where rn > 1 

Working example at SE Data.

+0

non sapeva di 'partition by', very cool! – mellamokb

+0

+1 - Stavo usando 'cross apply ', ma questo è molto più ordinato. –

-1

in mysql:

create temporary table table2 as (select min(pk) as pk from Table1 group by FkIdResult );  
delete from Table1 where pk not in (select pk from table2) 
Problemi correlati