2012-03-23 12 views
5

Ta nazwa mojego stolika Result_SimulUsuń zduplikowane wiersze i przechowywać jeden wiersz

Jest to wartość

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

Jak utrzymać po prostu zachować wiersze Pk = 1 i Pk = 3 usuwać Pk = 2 i Pk = 4

Dzięki za pomoc.

Nie jestem naprawdę dobry w TSQL

Frank

+0

Jaką wersję serwera sql-you jesteś? –

+0

Serwer sql 2008 – FrankSharp

Odpowiedz

12

Można użyć row_number dać każdy duplikat numer rosnąco, a następnie usunąć 2. i wyższych duplikaty:

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

nie wiedział o "partycji przez", bardzo fajnie! – mellamokb

+0

+1 - Użyłem opcji "Zastosuj krzyż", ale jest to o wiele lepsze. –

-1

w 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) 
Powiązane problemy