让我们说如果参加抽奖,你可以获得免费赛车。要参加,请提供姓名,地址,电话号码和电子邮件。只有不同的电子邮件才能参与抽奖。超过10万人参加了抽奖。他们中的许多人使用2或3个不同的电子邮件,但使用相同的名称,地址和电话号码。写一个查询,告诉我表中有多少重复项。我的情况与此类似。
这是表格格式
RecID Name Address Phone email
假设所有记录都是nvarchar,除了RecID是int。还假设提供了所有字段。我不知道如何在需要的3列匹配时使用group by。
答案 0 :(得分:1)
SELECT Name, Address, Phone, COUNT(*) as NumEntries
FROM YourTable
GROUP BY Name, Address, Phone
HAVING COUNT(*) > 1 /* Duplicates exist */
而且,如果您还想要包含个人电子邮件地址:
SELECT t.Name, t.Address, t.Phone, t.email, q.NumEntries
FROM YourTable t
INNER JOIN (SELECT Name, Address, Phone, COUNT(*) as NumEntries
FROM YourTable
GROUP BY Name, Address, Phone
HAVING COUNT(*) > 1 /* Duplicates exist */) q
ON t.Name = q.Name
AND t.Address = q.Address
AND t.Phone = q.Phone
ORDER BY t.Name, t.Address, t.Phone, t.email
答案 1 :(得分:1)
您只需使用GROUP BY
中所有相同的字段:
SELECT Name, Address, Phone, Count(*)
from MyTAble
GROUP BY Name, Address, Phone
HAVING Count(*) > 1
返回的记录是具有重复项的名称,地址,电话组合。重复的数量是所有Count(*)的总和减去查询返回的记录数(因为从技术上讲,每个组中的一个不是重复的,只有其余的一个)。
答案 2 :(得分:-1)
SELECT *
FROM table
WHERE Phone IN
( SELECT Phone
FROM table
GROUP BY Name, Address, Phone
WHERE COUNT(Name) > 1
) AS A
这应该可以为每个副本提供整行
您可以向外部查询添加ORDER BY Name, Address, Phone
,以确保重复项最终彼此相邻。
“注意上面代码中的错误;我只是证明它是正确的,没有尝试过。” - 唐纳德克努特