📜  在 MS SQL Server 中查找重复项

📅  最后修改于: 2022-05-13 01:55:12.459000             🧑  作者: Mango

在 MS SQL Server 中查找重复项

我们可以使用以下方法来查找表中的重复值。

  • GROUP BY 子句。
  • ROW_NUMBER()函数。

1. 使用 GROUP BY 子句查找重复值:

句法 :

SELECT col1, col2, ...COUNT(*)
FROM table_name
GROUP BY col1, col2, ...
HAVING COUNT(*) > 1;


例子 -
让我们创建一个名为 Geek 的表,其中包含三列 ID、A 和 B。

CREATE TABLE Geek (
ID INT IDENTITY(1, 1),
A INT,
B INT,
PRIMARY KEY(id));


让我们在 Geek 表中添加一些值——

INSERT INTO Geek (A, B)
VALUES (1, 1),(1, 2), (1, 3), (2, 1),
(1, 2), (1, 3), (2, 1), (2, 2);


我们知道 Geek 表包含以下重复行 -

(1, 2) (2, 1) (1, 3) 

MS SQL Server 查询使用 Geek 表中的 GROUP BY 子句查找重复行:

SELECT A, B, COUNT(*) AS num
FROM Geek
GROUP BY A, B
HAVING COUNT(*) > 1;

输出 -

表 –极客

ABnum
212
122
132

要查找每个重复行的完整行详细信息,请使用 CTE 将上述查询的输出与 Geek 表连接起来:

WITH CTE AS ( 
SELECT A, B, COUNT(*) AS num
FROM Geek
GROUP BY A, B
HAVING COUNT(*) > 1
)
SELECT Geek.ID, Geek.A, Geek.B
FROM Geek
INNER JOIN CTE ON
CTE.A = Geek.A AND CTE.B = Geek.B
ORDER BY Geek.A, Geek.B;


输出 -

表 –极客

IDAB
212
512
613
313
421
721


2. 使用 ROW_NUMBER()函数查找重复值:

句法 :

WITH cte AS (
SELECT col,ROW_NUMBER() OVER (
PARTITION BY col
ORDER BY col) AS row_num
FROM table_name
)  
SELECT * 
FROM cte  
WHERE row_num > 1;

MS SQL Server 查询使用 Geek 表中的 ROW_NUMBER()函数查找重复行:

WITH CTE AS (
SELECT A, B,
ROW_NUMBER() OVER (
PARTITION BY A, B
ORDER BY A, B
) AS rownum
FROM Geek
)
SELECT *
FROM CTE
WHERE rownum > 1;

输出 -

表 –极客

ABrownum
122
132
212