sql >> Databasteknik >  >> RDS >> Sqlserver

dela kommaseparerat värde från tabellen i sql-servern

Du kan extrahera namnen med hjälp av en rekursiv CTE och lite strängparsning. Resten är bara aggregering:

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;

Som du säkert har räknat ut är det en dålig idé att lagra kommaavgränsade listor i SQL Server. Du bör ha en associations-/korsningstabell med en rad per namn (och andra kolumner som beskriver listan den finns i).



  1. Drop Column från Large Table

  2. Skriptet kommer inte att logga in

  3. regexp för alla karaktärer med accent i Oracle

  4. Frågar konversationer från meddelandetabellen