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