有大量关于如何查找重复行,删除它们或列出重复行的列表。在我尝试搜索的大量回复中,这些是我发现的唯一回复。我想我会提出我的问题,因为它已经过了一个小时但仍然没有运气。
这是我的示例数据
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”中?
答案 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 | | | |