Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

dividir o valor separado por vírgula da tabela no servidor sql


Você pode extrair os nomes usando um CTE recursivo e alguma análise de string. O resto é apenas agregação:
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;

Como você provavelmente já percebeu, armazenar listas delimitadas por vírgulas no SQL Server é uma má ideia. Você deve ter uma tabela de associação/junção com uma linha por nome (e outras colunas descrevendo a lista em que está).