我有一个包含2列名和姓的表。该表通过某些记录的名字和姓氏交换来包含重复的条目。
例如
First Name Last name
--------------------
john Keats
Ray Owano
Keats john
Joseph taylor
Owano Ray
我想找到名字和姓氏的唯一组合。
我尝试创建一个全为1的标志,并尝试进行完全外部联接以获取所有可能的组合,并尝试过滤唯一组合,但无济于事,我被感动了。
答案 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;
请注意,我会先随意报告姓氏。由于给定的第一对/最后一对可以在任何方向上,因此我们报告为“ 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
。
输出
+-----------+----------+
| 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”!