SQL - 查找重复项,然后使用count添加到另一个表

时间:2012-07-10 20:14:53

标签: sql sql-server count duplicates

有大量关于如何查找重复行,删除它们或列出重复行的列表。在我尝试搜索的大量回复中,这些是我发现的唯一回复。我想我会提出我的问题,因为它已经过了一个小时但仍然没有运气。

这是我的示例数据

Table Name: Customers
_____________________________
ID   | CompanyName
--------------
1    | Joes
2    | Wendys
3    | Kellys
4    | Ricks
5    | Wendys
6    | Kellys
7    | Kellys

我需要能够找到此表中的所有重复项,然后将结果放入另一个表中,该表列出了公司名称以及找到的重复项数。

例如上面的表我应该有一个新的表格,如

Table Name: CustomerTotals
_______________________________
ID   | CompanyName  |   Totals
-------------------------------
1    | Joes         |    1
2    | Wendys       |    2
3    | Kellys       |    3
4    | Ricks        |    1

-----编辑在2个回复后添加,遇到另一个问题------

感谢您的回复!对面怎么样?假设我只想将项目添加到Customer表中不存在于CustomerTotals表中的新表“UniqueCustomers”中?

5 个答案:

答案 0 :(得分:5)

试试这个:

INSERT INTO CustomerTotals
(CompanyName, Totals)
SELECT CompanyName, COUNT(*)
FROM Customer
GROUP BY CompanyName

ID字段使用identity列。

答案 1 :(得分:0)

获取重复项,您可以

Insert into CustomerTotals (Id, CompanyName, Totals)
    Select min(Id), CompanyName, count(*) From Customers
    group by CompanyName  

你得到了结果,为每个公司名称保留了最小的id(如果你真的需要原始表中的第一个id,正如我在结果中看到的那样)。 如果没有,您可以使用标识列

答案 2 :(得分:0)

如果您只想将重复项插入第二个表,请使用:

INSERT INTO CustomerTotals
(CompanyName, Totals)
SELECT CompanyName, COUNT(*)
FROM Customer
GROUP BY CompanyName
HAVING Count(*) > 1

答案 3 :(得分:0)

上面的例子很好。但是,您应该使用count(1)代替count(*)来提高效果。 阅读this问题。

答案 4 :(得分:0)

我认为下面的脚本最简单...

| Pid     | int(6) unsigned zerofill | NO   | PRI | NULL    | auto_increment |

| Ino     | varchar(20)              | NO   | PRI |         |                |

| pno     | int(11)                  | NO   | PRI | 0       |                |

| cno     | int(11)                  | NO   | PRI | 0       |                |

| Pamount | double                   | NO   |     |         |                |

| Pdate   | date                     | NO   |     |         |                |

| Ptype   | varchar(15)              | NO   |     |         |                |