Sql server SQL-使用“高级”在两个表之间进行比较;就好像",;
好的,这会变得有点混乱,所以请尽量和我在一起 我有一张这样的信息表Sql server SQL-使用“高级”在两个表之间进行比较;就好像",;,sql-server,Sql Server,好的,这会变得有点混乱,所以请尽量和我在一起 我有一张这样的信息表 Table Name: Customers _____________________________ ID | CompanyName | FirstName | LastName | Phone ------------------------------- 1 | Joes | Joe | James | 1233334444 2 | Kennys | Kenn
Table Name: Customers
_____________________________
ID | CompanyName | FirstName | LastName | Phone
-------------------------------
1 | Joes | Joe | James | 1233334444
2 | Kennys | Kenny | Johnson | 2222334555
3 | Kellys | Kelly | Gibson | 5454445445
4 | Ricks #1 | Rick | Lawson | 4545334222
5 | Johns #1 | Johny B | James | 4545222211
6 | Johns #2 | Johny | James | 4545222211
7 | Johns #3 | Johny | James | 4545222211
8 | Ricks #2 | Rick A | Lawson | 4545334222
我需要知道如何创建一个SQL语句来查找所有重复记录,将它们相加,然后显示找到的第一个公司名称的重复记录总数
*这里是一个陷阱——正如你从上表中看到的,有时他们会将自己的首字母写在自己的名字上(例如,ID5和ID6是同一个人,但他将中间的首字母写在ID5中,你可以看到ID4和ID7的首字母)
我需要SQL语句将比较建立在匹配姓氏的基础上,然后对姓氏和公司名执行“类似”的操作,以确保它们按应有的方式计数
例如,我应该得到一个类似于
Table Name: TableResults
_____________________________
ID | CompanyName | FirstName | LastName | Phone | Count
-------------------------------
4 | Ricks #1 | Rick | Lawson | 4545334222 | 2
5 | Johns #1 | Johny B | James | 4545222211 | 3
这可能吗?如果可能的话,我相信名称分析将是一些非常复杂的SQL。首先,您可能希望确保名称列使用不区分大小写的排序规则,例如
utf8\u general\u ci
。我不相信人们总是把自己的名字大写。如果他们粗心的话,他们也可能有打字错误
LIKE
不够聪明,无法匹配差异较小的字符串,除非您确切知道将%
放在何处。它不仅仅是一个通配符匹配函数
也许用算法检查一下?但这只有在所有数据都是英文的情况下才有效
电话号码是识别重复项的可靠方法吗?如果是这样,您可以跳过名称分析,只需执行以下操作:
SELECT ID, CompanyName, FirstName, LastName, Phone, COUNT(1) AS Count
FROM Customers
GROUP BY Phone
ORDER BY ID ASC
我想你可能需要使用模糊匹配 试试这个:
WITH InitialData AS
(
SELECT *, SOUNDEX(LastName) + SOUNDEX(CompanyName) Similarity
FROM Customers
), FinalData AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY Similarity ORDER BY ID) Position,
COUNT(1) OVER(PARTITION BY Similarity) Count
FROM InitialData
)
SELECT ID, CompanyName, FirstName, LastName, Phone, Count
FROM FinalData
WHERE Position = 1
AND Count > 1
SQLFiddle:不,有时他们会列出不同的电话号码,所以我不能使用电话号码。在SQL中如何使用电话号码?我尝试了复制粘贴,但我只是得到了错误。我刚刚得到“无效的SQL语句”,我发布的代码是SQL。错误是什么?您使用的SQL Server的版本是什么?我在SQL 2005和Access 2007中都尝试过。两者都表示SQL语句无效。显然,我在SQL server 2005中复制的n粘贴错误。所以我想对于访问来说没有办法做到这一点?我不确定访问中是否有任何固有的模糊匹配方法。但您可以查看本文以添加一个: