sql >> Base de Datos >  >> RDS >> Sqlserver

dividir el valor separado por comas de la tabla en el servidor sql

Puede extraer los nombres usando un CTE recursivo y un poco de análisis de cadenas. El resto es solo agregación:

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 probablemente haya descubierto, almacenar listas delimitadas por comas en SQL Server es una mala idea. Debe tener una tabla de asociación/unión con una fila por nombre (y otras columnas que describan la lista en la que se encuentra).