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

opdel kommasepareret værdi fra tabel i sql-server

Du kan udtrække navnene ved hjælp af en rekursiv CTE og noget strengparsing. Resten er kun sammenlægning:

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 sikkert har regnet ud, er det en dårlig idé at gemme kommaseparerede lister i SQL Server. Du bør have en tilknytnings-/forbindelsestabel med én række pr. navn (og andre kolonner, der beskriver den liste, den er på).



  1. MySQL-opdatering fra en tabel til en anden med tilstand, der ikke virker?

  2. Awesome 24 Concurrent Manager Interview spørgsmål

  3. Mysql:Udfør af IKKE EKSISTERER. Er det muligt at forbedre ydeevnen?

  4. Gyldig GROUP BY-forespørgsel virker ikke, når den kombineres med INSERT INTO på Oracle