Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Trennkomma Trennwert aus Tabelle in SQL Server

Sie können die Namen mit einem rekursiven CTE und etwas String-Parsing extrahieren. Der Rest ist nur Aggregation:

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;

Wie Sie wahrscheinlich schon festgestellt haben, ist das Speichern von durch Kommas getrennten Listen in SQL Server eine schlechte Idee. Sie sollten eine Assoziations-/Verbindungstabelle mit einer Zeile pro Name haben (und anderen Spalten, die die Liste beschreiben, in der er sich befindet).