2011-01-19 77 views
2

我有以下查询选择姓和名的组合,并显示我愚蠢。它起作用,而不是问题在这里。如何创建一个SQL区别查询并添加一些其他字段

我想包括其他三个领域供参考; Id,cUser和cDate。但是,这些附加字段不应用于确定重复项,因为我可能不会得到任何重复项。

SELECT * FROM 
(SELECT FirstName, LastName, COUNT(*) as "Count" 
FROM Contacts 
WHERE ContactTypeID = 1 
GROUP BY LastName,FirstName 
) AS X 
WHERE COUNT > 1 
ORDER BY COUNT DESC 

有什么建议吗?谢谢!

回答

2
SELECT * 
FROM (
     SELECT *, COUNT(*) OVER (PARTITION BY FirstName, LastName) AS cnt 
     FROM Contacts 
     WHERE ContactTypeId = 1 
     ) q 
WHERE cnt > 1 
ORDER BY 
     cnt DESC 

这将返回每个重复记录的所有字段。

+0

混账人类验证的东西....你打我吧... – Lamak 2011-01-19 15:17:04

0

如果这些字段都是一样的,那么你可以将它们包含在GROUP BY,它不会影响重复的检测

如果他们没有,那么你必须决定你将应用到他们什么样的聚集函数,例如MAX()或MIN()会起作用,并会给你一些指示,说明哪些值与重复项的某些属性相关联。

否则,如果你想看到所有的记录,你可以加入回源

SELECT X2.* FROM 
(SELECT FirstName, LastName, COUNT(*) as "Count" 
FROM Contacts 
WHERE ContactTypeID = 1 
GROUP BY LastName,FirstName 
) AS X INNER JOIN Contact X2 ON X.LastName = X2.LastName AND X.FirstName = X2.FirstName 
WHERE COUNT > 1 
ORDER BY COUNT DESC 
相关问题