有没有一种方法可以从 table 服务器中的单个列中删除重复项?
Is there a way to delete duplicates from a table with a single column in SQL Server?
有没有一种方法可以像这样从 table 中删除重复的行,而无需删除 table 并使用不同的行重新创建它?
DROP TABLE IF EXISTS #temp;
CREATE TABLE #temp (id INT);
INSERT INTO #temp
VALUES (1), (2), (2), (2), (3), (3);
使用 CTE 和 ROW_NUMBER 按您正在查看的指定列分组可以干净地删除重复值,因为 ROW_NUMBER 使用 PARTITION BY 聚合的重复值递增计数。当在排序时发现新分组时,它将 ROW_NUMBER 重置为 1,从下一个不同分组值的记录开始。
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN
FROM #temp
)
DELETE FROM CTE WHERE RN<>1
这是你的答案,首先我们必须找到所有重新编码
DELETE t
FROM #temp t
WHERE (SELECT count(1)
FROM #temp t1
WHERE t.id =t1.id )
>1
希望您能找到最佳解决方案。
有没有一种方法可以像这样从 table 中删除重复的行,而无需删除 table 并使用不同的行重新创建它?
DROP TABLE IF EXISTS #temp;
CREATE TABLE #temp (id INT);
INSERT INTO #temp
VALUES (1), (2), (2), (2), (3), (3);
使用 CTE 和 ROW_NUMBER 按您正在查看的指定列分组可以干净地删除重复值,因为 ROW_NUMBER 使用 PARTITION BY 聚合的重复值递增计数。当在排序时发现新分组时,它将 ROW_NUMBER 重置为 1,从下一个不同分组值的记录开始。
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN
FROM #temp
)
DELETE FROM CTE WHERE RN<>1
这是你的答案,首先我们必须找到所有重新编码
DELETE t
FROM #temp t
WHERE (SELECT count(1)
FROM #temp t1
WHERE t.id =t1.id )
>1
希望您能找到最佳解决方案。