Sql server 查找并显示重复项,然后还显示其他两列-简单语法问题或创建视图或?

Sql server 查找并显示重复项,然后还显示其他两列-简单语法问题或创建视图或?,sql-server,duplicates,sanitize,Sql Server,Duplicates,Sanitize,我正在检查数据库以识别重复的条目,虽然我可以这样做,但我还需要在结果中显示一些其他列,如active、user id,以便我可以清理数据库。这看起来很简单,但我无法尝试工作。 使用MSSQL时,需要的是通用方法。 所以,总而言之,识别重复项的几乎复杂的查询正在工作,但我还不能让结果也简单地显示诸如用户处于活动状态或最终输出中的用户是4367之类的内容。 提前谢谢。我认为创建视图可能是一个答案,但还没有运气。JOIN似乎太复杂和易操作,哪里会阻塞糟糕的语法?只需使用self-JOIN即可。类似于这

我正在检查数据库以识别重复的条目,虽然我可以这样做,但我还需要在结果中显示一些其他列,如active、user id,以便我可以清理数据库。这看起来很简单,但我无法尝试工作。 使用MSSQL时,需要的是通用方法。 所以,总而言之,识别重复项的几乎复杂的查询正在工作,但我还不能让结果也简单地显示诸如用户处于活动状态或最终输出中的用户是4367之类的内容。
提前谢谢。我认为创建视图可能是一个答案,但还没有运气。JOIN似乎太复杂和易操作,哪里会阻塞糟糕的语法?

只需使用self-JOIN即可。类似于这样的情况,其中Value是要检查的重复项,ID是唯一的rowID,UserID是要报告的另一个值:

 SELECT a.Value, a.ID, a.UserID
   FROM MyTable a
   JOIN MyTable b
     ON (a.Value = b.Value and a.ID <> b.ID)
  ORDER BY a.ID
使用Group By并添加额外列时,也将按额外列进行分组

您需要一个子查询和一个未分组的主查询,例如:

SELECT * 
FROM users 
WHERE fullname IN (SELECT fullname 
                   FROM users 
                   GROUP by fullname 
                   HAVING ( COUNT(fullname) > 1 ))

您可能还需要将上面的SELECT*更改为SELECT DISTINCT*。

如果您使用的是SQL Server 2005或更高版本,那么使用COUNT OVER很容易:

SELECT
  YourGroupByColumn,
  SomeOtherColumn1,
  SomeOtherColumn2
FROM
  (
    SELECT
      *,
      cnt = COUNT(*) OVER (PARTITION BY YourGroupByColumn)
    FROM
      dbo.YourTable
  ) AS s
WHERE
  cnt > 1
;

使用COUNT OVER允许您在获取详细数据的同时获取聚合数据计数。为了对以这种方式获得的聚合结果进行筛选,您需要将带有计数的结果集用作派生表,并引用外部查询的WHERE子句中的计数列,这就是上面的查询所做的。

欢迎使用stackoverflow。要检查数据库中的重复项吗?还是在桌子上?请向我们显示DDL和您的尝试脚本,以便其他人可以提供帮助。我通过按全名选择用户组中的全名(COUNTfullname>1)来显示我的副本,但当我尝试添加OK时,现在还请显示其他列,以显示用户id,或者如果它们在数据库中是否仍处于活动状态,则会阻塞。处理10到100人的数据库,这些人发生了变化,有时还会重复出现。如果你根据评论编辑你的问题,这将比添加你自己的包含所需信息的评论更具可读性。