Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当名字和姓氏的顺序不同时,如何在表中找到重复的名字?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 当名字和姓氏的顺序不同时,如何在表中找到重复的名字?

Sql 当名字和姓氏的顺序不同时,如何在表中找到重复的名字?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图从表中找到重复的名称。目前我有这个查询,它确实发现了一些重复的名称 select DisplayName, count(DisplayName) from table_name group by DisplayName having count(DisplayName) > 1 这将提供完全相同的显示名称。例如,如果有两个“Richard,Michael”显示名称,则它们将显示在输出中。但是,如果有第三个显示名称是“Michael,Richard”,那么我的当前查询将不会显示该名

我试图从表中找到重复的名称。目前我有这个查询,它确实发现了一些重复的名称

select DisplayName, count(DisplayName)
from  table_name
group by DisplayName
having count(DisplayName) > 1

这将提供完全相同的显示名称。例如,如果有两个“Richard,Michael”显示名称,则它们将显示在输出中。但是,如果有第三个显示名称是“Michael,Richard”,那么我的当前查询将不会显示该名称。

这就是自由式文本未正确规范化的问题。需要更多的逻辑,但抓取一份,您可以这样做:

DECLARE @names TABLE (SomeName VARCHAR(100));
INSERT @names 
VALUES('Richard, Michael'),('Sam Jones'),('Michael Richard'),('Bill Smith'),('Bill Smith');

SELECT 
  DisplayName = f.Nm,
  Total       = COUNT(f.Nm)
FROM   @names AS n
CROSS APPLY 
(
  SELECT LTRIM(x.item+' ')
  FROM   dbo.delimitedSplit8K(n.SomeName,',') AS x
  ORDER BY x.itemNumber DESC
  FOR XML PATH('')
) AS f(Nm)
GROUP BY f.Nm
HAVING   COUNT(*) > 1;
返回:

DisplayName                  Total
---------------------------- -----------
Bill Smith                   2
Michael Richard              2

不,不会,因为迈克尔、理查德和理查德、迈克尔是完全不同的名字。作为一个姓是名的人(如果你在结尾去掉s,因为对某些人来说它是隐形的),我可以告诉你,如果你叫他们“迈克尔”,理查德会很生气。你希望“理查兹,迈克尔”也能和“迈克尔,理查德”相配吗?我真的希望不是这样。我看到DisplayName是这样的,但通常情况下,如果在一个字段中有两个不同的值,那么在数据库中就有两个单独的字段,然后在显示层中,可以将它们组合在一起。我要澄清的是,一些用户要么创建了多个帐户(两个“Richard,Michael”示例)以及创建一个帐户,在该帐户中,他们输入自己的显示名为FirstName、LastName(“Michael,Richard”示例)。在本例中,Michael Richard是一个人,但创建了三个不同的帐户。忽略实际的SQL逻辑来等同于这两个集合,您如何确切地知道“Michael,Richard”是“Richard,Michael”的副本?sql逻辑很简单(有很多关于格式的假设)-您只需从字符串中分离两个值(“split”-hint),然后聚合/连接/组合。但这闻起来像是另一个世界的混乱。