2012-03-23 6 views
5

этом имя моего стола Result_SimulУдалить повторяющиеся строки и сохранить одну строку

Это значение

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

Как сохранить только сохранить строки Рк = 1 и Рк = 3 и удалить Рк = 2 и Pk = 4

Спасибо, что помогли мне.

Im не очень хорошо в TSQL

Frank

+0

Какая версия sql-сервера включена? –

+0

sql server 2008 – FrankSharp

ответ

12

Вы можете использовать row_number дать каждому продублировать номер по возрастанию, а затем удалить 2-й и выше дубликатов:

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

+0

+1 - Я использовал «cross apply», но это намного опрятно. –

-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) 
Смежные вопросы