Если вы действительно доверяете своим данным, вот решение:
--proof of concept preparation start
declare @YourTable table (name varchar(50))
insert into @YourTable (name) values
('Mr. John Brady'),
('Ms. Abraham Lenin'),
('Mrs. John Brady'),
('Mr. Michael King'),
('Mrs. Neil Thomas'),
('Mrs. Michael King')
--proof of concept preparation end
;with purenames as (
select name,
LEFT(name, CHARINDEX(' ', name, 0)) salutation,
RIGHT(name, LEN(name) - CHARINDEX(' ', name, 0)) purename
from @YourTable
)
select p1.name
from purenames p1
inner join purenames p2
on p1.purename = p2.purename and p1.salutation <> p2.salutation
order by p1.purename, p1.name
Однако, это будет работать идеально, только если первое слово имени ВСЕГДА приветствует вас (помните, вы должны доверять своемуdata).
И, конечно, мне пришлось зафиксировать Mrs. Micheal King
в Mrs. Michael King
, поэтому чистое имя (без приветствия) должно быть идентичным.
Я упоминал что-то о доверии вашим данным?Что ж, плохая новость в том, что по опыту вы не можете доверять данным.Однако, если у вас есть хорошие данные, вы сможете определить хорошее количество пар.