2012-03-23 37 views
5

Este el nombre de mi mesa Result_SimulEliminar filas duplicadas y mantenga una fila

Este es el valor

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

Cómo mantener sólo mantener filas Pk = 1 y Pk = 3 y eliminar Pk = 2 y Pk = 4

Gracias por ayudarme.

No soy muy bueno en Tsql

Frank

+0

¿En qué versión de sql-server estás? –

+0

sql server 2008 – FrankSharp

Respuesta

12

Puede utilizar row_number para dar cada duplicado un número ascendente, y luego borrar el segundo y duplicados mayores:

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

no sabía nada de 'partition by', ¡genial! – mellamokb

+0

+1 - Estaba usando 'cross apply', pero esto es mucho más limpio. –

-1

en 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) 
Cuestiones relacionadas