查找唯一的名字和姓氏组合

时间:2019-02-13 06:20:08

标签: sql sql-server

我有一个包含2列名和姓的表。该表通过某些记录的名字和姓氏交换来包含重复的条目。

例如

First Name Last name
--------------------
john       Keats 
Ray        Owano
Keats      john
Joseph     taylor
Owano      Ray

我想找到名字和姓氏的唯一组合。

我尝试创建一个全为1的标志,并尝试进行完全外部联接以获取所有可能的组合,并尝试过滤唯一组合,但无济于事,我被感动了。

3 个答案:

答案 0 :(得分:2)

一个选项是在整个表格中对姓氏和姓氏的大小进行不同的选择。

SELECT DISTINCT
    CASE WHEN first < last THEN first ELSE last END AS first,
    CASE WHEN first < last THEN last ELSE first END AS last
FROM yourTable;

enter image description here

Demo

请注意,我会先随意报告姓氏。由于给定的第一对/最后一对可以在任何方向上,因此我们报告为“ first”的名字是任意的。

答案 1 :(得分:1)

您也可以尝试使用self join跟随。

SELECT T1.firstname, 
       T1.lastname 
FROM   [TableName] T1 
       LEFT JOIN [TableName] T2 
              ON T1.firstname = T2.lastname 
                 AND T1.lastname = T2.firstname 
                 AND T1.firstname > T2.firstname 
WHERE  T2.lastname IS NULL 
GROUP  BY T1.firstname, 
          T1.lastname 

注意:如果您还想显示重复的记录,请删除GROUP BY

Online Demo

输出

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| john      | Keats    |
+-----------+----------+
| Joseph    | taylor   |
+-----------+----------+
| Owano     | Ray      |
+-----------+----------+

答案 2 :(得分:1)

您可以将名字与姓氏连接起来,并检查名称组合是否存在:

  Select FirstName, LastName From dbo.table Where (FirstName+LastName) not in (Select LastName+FirstName From dbo.table); 

它将返回唯一的“ Joshep Taylor”!