📜  t-sql 获取重复行 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:27.636000             🧑  作者: Mango

使用T-SQL获取重复行

在SQL Server中,可以使用T-SQL来获取重复的行,以便在数据集中找到重复的记录。 下面是一些用于在T-SQL中获取重复行的方法。

方法一:使用GROUP BY和HAVING子句

可以使用GROUP BY子句来对数据进行分组,然后使用HAVING子句来查找重复行。 下面是一个使用GROUP BY和HAVING子句来查找重复记录的示例:

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

在上面的代码中,col1和col2是需要在结果集中返回的列,table_name是要查询的表名。 COUNT(*)用于计算每个组中的记录数,如果记录数大于1,则认为这些记录是重复的行。

方法二:使用窗口函数

可以使用窗口函数ROW_NUMBER()来计算每一行的序号,然后在使用窗口函数COUNT()来计算每一行的出现次数。下面是一个使用窗口函数来查找重复行的示例:

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

在上面的代码中,cte是一个公用表表达式,用于计算每列的行号和出现次数。第一个PARTITION BY子句用于指定分组列,第二个ORDER BY子句用于按照指定顺序对每个分组中的记录排序。然后,第一个ROW_NUMBER()窗口函数用于计算每行的排名,第二个COUNT()窗口函数用于计算每个分组中的行数。最后,查询返回重复的行。

方法三:使用EXISTS子句

也可以使用EXISTS子句来查找重复行。下面是一个使用EXISTS子句来查找重复行的示例:

SELECT col1, col2
FROM table_name t1
WHERE EXISTS (
  SELECT 1
  FROM table_name t2
  WHERE t1.col1 = t2.col1
    AND t1.col2 = t2.col2
    AND t1.primary_key_column <> t2.primary_key_column
);

在上面的代码中,第一个SELECT子句用于选择要返回的列。然后用WHERE子句来过滤出现在同一列中的重复记录。存在一个子查询,该子查询返回匹配的记录集合。 最后,查询返回重复的行。

总结

在SQL Server中,可以使用GROUP BY和HAVING子句、窗口函数以及EXISTS子句来查找重复行。我们可以选择任何一种方法,根据数据集的性质和查询的要求,来查找目标数据集中的重复记录。