我想删除重复项,例如我想要删除此行“Test2,321,0”,因为有重复项,但在第1行和第2行中我只想删除第二行,因为类型ID高于第一行中的当前副本。
这是我的表
ID, Name, RecordNum, Type -------------------------- 1, Test, 123, 0 2, Test, 123, 1 3, Test2, 321, 0 4, Test2, 321, 0
我可以使用此查询删除第4行中的重复项。但我似乎无法弄清楚如何删除第2行,因为第1行是相同的但类型编号更低。如果类型编号为2则会获胜,您必须删除任何具有0和1类型编号且具有相同名称和recordnum的重复项。
WITH dup2 as (
SELECT Name
, RecordNum
, Type ROW_NUMBER() OVER(PARTITION BY Name, RecordNum, Type ORDER BY ID ASC) AS NumOfDups
FROM MyTbale)
delete FROM dup2 WHERE NumOfDups > 1
答案 0 :(得分:3)
所以基本上你只想为每个Name, RecordNum
组保留一条记录。如果Type相同,则仅保留最低ID,如果Type不同,请保留最低类型:
WITH dup2 AS
(
SELECT NAME,
RecordNum,
NumOfDups = ROW_NUMBER()OVER(
PARTITION BY NAME, RecordNum
ORDER BY CASE WHEN Type=2 THEN 0 ELSE 1 END, Type, Id)
FROM MyTbale)
DELETE
FROM dup2
WHERE NumOfDups > 1
根据评论编辑:"当类型= 2时,我想删除其他匹配记录,其中类型为零或一,所以两个胜利这里"