Как удалить все дубликаты записей, кроме одного в SQL Server
Я попытался удалить несколько записей без одного
Входные данные:
Id Temp P_TempId ------------------------------------ AN #1001#.Test 5001,8001 AN #1001#.Test 5001,8001 AN #1002#.Test 5001,4001,7001,8001 AN #1002#.Test 5001,4001,7001,8001 AN #1002#.Test 5001,4001,7001,8001
Вывод:
Id Temp P_TempId --------------------------------------- AN #1001#.Test 5001,8001 AN #1002#.Test 5001,4001,7001,8001
Используя общее табличное выражение с row_number()
для номера каждого набора Id_Temp, P_TempId
и удалите номера с номером больше 1.
;with cte as ( select * , rn = row_number() over ( partition by Id, Temp, P_TempId order by (select 1) ) from t ) delete from cte where cte.rn > 1
или без cte, используя вместо этого стандартный подзапрос:
delete s from ( select * , rn = row_number() over ( partition by Id, Temp, P_TempId order by (select 1) ) from t ) as s where s.rn > 1
демо-версия рекстера: http://rextester.com/CWO44915
возвращает:
+----+-------------+---------------------+ | Id | Temp | P_TempId | +----+-------------+---------------------+ | AN | #1001#.Test | 5001,8001 | | AN | #1002#.Test | 5001,4001,7001,8001 | +----+-------------+---------------------+