Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

dividere il valore separato dalla virgola dalla tabella nel server sql

Puoi estrarre i nomi usando un CTE ricorsivo e alcune analisi di stringhe. Il resto è solo aggregazione:

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;

Come probabilmente avrai capito, archiviare elenchi delimitati da virgole in SQL Server è una cattiva idea. Dovresti avere una tabella di associazione/giunzione con una riga per nome (e altre colonne che descrivono l'elenco in cui si trova).