0

我正在检查数据库以识别重复条目,虽然我可以做到这一点,但我还需要在结果中显示一些其他列(如活动、用户 ID),以便我可以清理数据库。这似乎很简单,但我无法尝试工作。
使用 MSSQL,需要通用的方法。
因此,回顾一下,用于识别重复项的几乎复杂的查询正在工作,但我还不能使结果也简单地在我的最终输出中显示“用户处于活动状态”或“用户是 #4367”之类的内容。提前致谢。我认为 CREATE VIEW 可能是一个答案,但还没有运气。JOIN 似乎过于复杂和可操作,WHERE 阻塞(语法错误?)

4

3 回答 3

2

当您使用Group By并添加额外的列时,您也会按额外的列进行分组。

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

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

您可能还想将其更改SELECT *SELECT DISTINCT *上述内容。

于 2013-09-17T01:39:32.470 回答
0

只需使用自我加入。像这样的东西(其中 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
于 2013-09-17T01:38:51.937 回答
0

如果您使用的是 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 子句中引用计数列,这就是上面的查询所做的。

于 2015-06-17T14:09:20.033 回答