Я предпочитаю неверное предположение, что первое имя - это часть имени перед первым пробелом.
, тогда первое имя определяется по имени как
select left(Name, charindex(' ',Name)-1)
.группируйте по этому и полу
select
Name=left(Name, charindex(' ',Name)-1),Gender
from
yourTableName
group by
left(Name, charindex(' ',Name)-1),Gender
order by left(Name, charindex(' ',Name)-1),Gender
, чтобы найти людей с двумя полами и одним и тем же именем, которые вы можете использовать
select
Name=left(Name, charindex(' ',Name)-1)
from
yourTableName
group by
left(Name, charindex(' ',Name)-1)
having count(distinct gender)>1
Если вы хотите использовать оба вместе, возможно, в сценарии, когда выесли вы хотите удалить имя, у которого есть два пола, вы можете сделать что-то вроде ниже
; with NnG as
(
select
Name=left(Name, charindex(' ',Name)-1),Gender
from
yourTableName
group by
left(Name, charindex(' ',Name)-1),Gender
),
N2G as
(
select
Name=left(Name, charindex(' ',Name)-1)
from
yourTableName
group by
left(Name, charindex(' ',Name)-1)
having count(distinct gender)>1
)
select * from nng left join n2g
on nng.Name=N2G.name
where n2g.name is null