2012-03-23 53 views
5

này tên của bảng của tôi Result_SimulXóa hàng trùng lặp và giữ một hàng

Đây là giá trị

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

Làm thế nào để giữ chỉ giữ hàng Pk = 1 và Vn = 3 và xóa Vn = 2 và Pk = 4

Cảm ơn vì đã giúp tôi.

Im không thực sự tốt trong TSQL

Frank

+0

Bạn đang sử dụng phiên bản máy chủ sql nào? –

+0

máy chủ sql 2008 – FrankSharp

Trả lời

12

Bạn có thể sử dụng row_number để cung cấp cho mỗi bản sao một số tăng dần, và sau đó xóa 2 và bản sao trở lên:

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

không biết về 'phân vùng bằng', rất tuyệt! – mellamokb

+0

+1 - Tôi đã sử dụng 'cross apply', nhưng điều này là nhiều neater. –

-1

trong 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) 
Các vấn đề liên quan