在 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;
输出 -
表 –极客
A | B | num |
---|---|---|
2 | 1 | 2 |
1 | 2 | 2 |
1 | 3 | 2 |
要查找每个重复行的完整行详细信息,请使用 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;
输出 -
表 –极客
ID | A | B |
---|---|---|
2 | 1 | 2 |
5 | 1 | 2 |
6 | 1 | 3 |
3 | 1 | 3 |
4 | 2 | 1 |
7 | 2 | 1 |
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;
输出 -
表 –极客
A | B | rownum |
---|---|---|
1 | 2 | 2 |
1 | 3 | 2 |
2 | 1 | 2 |