sql >> Database >  >> RDS >> Sqlserver

split komma seprate waarde van tabel in sql server

U kunt de namen extraheren met behulp van een recursieve CTE en wat string-parsing. De rest is gewoon aggregatie:

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;

Zoals je waarschijnlijk al weet, is het een slecht idee om door komma's gescheiden lijsten in SQL Server op te slaan. U zou een associatie-/knooppunttabel moeten hebben met één rij per naam (en andere kolommen die de lijst beschrijven waarin deze zich bevindt).



  1. PostgreSQL:Hoe ontsnappen '?

  2. Is er een manier om meerdere SQL Server 2008-schema's op te geven voor de opdracht 'generateChangeLog' van Liquibase?

  3. Hoe kan ik de MySQLi-extensie inschakelen in PHP 7?

  4. MariaDB JSON_CONTAINS() uitgelegd