2012-03-23 64 views
5
一行

這是我的表的名稱Result_Simul刪除重複行,並保持

這是值

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

如何保持自顧自地行PK = 1和PK = 3,刪除PK = 2和Pk = 4

感謝您的幫助。

我不是在TSQL真的好

弗蘭克

+0

你在什麼版本的sql-server? – 2012-03-23 19:03:07

+0

sql server 2008 – FrankSharp 2012-03-23 19:04:16

回答

12

您可以使用row_number給每個重複的上升數字,然後刪除第二和更高的重複:

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

不知道'partition by',非常酷! – mellamokb 2012-03-23 19:06:05

+0

+1 - 我正在使用'cross apply',但是這很整潔。 – 2012-03-23 19:18:40

-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)