U kunt de namen extraheren met behulp van een recursieve CTE en wat string-parsing. De rest is gewoon aggregatie:
with cte as (
select (case when names like '%,%'
then left(names, charindex(',', names) - 1)
else names
end) as name,
(case when names like '%,%'
then substring(names, charindex(',', names) + 1, len(names))
end) as names
from names
union all
select (case when names like '%,%'
then left(names, charindex(',', names) - 1)
else names
end) as name,
(case when names like '%,%'
then substring(names, charindex(',', names) + 1, len(names))
end)
from cte
where names is not null
)
select name, count(*)
from cte
group by name;
Zoals je waarschijnlijk al weet, is het een slecht idee om door komma's gescheiden lijsten in SQL Server op te slaan. U zou een associatie-/knooppunttabel moeten hebben met één rij per naam (en andere kolommen die de lijst beschrijven waarin deze zich bevindt).