Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

oddziel wartość przecinkiem od tabeli na serwerze sql

Nazwy można wyodrębnić za pomocą rekurencyjnego CTE i parsowania ciągów. Reszta to tylko agregacja:

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;

Jak zapewne się zorientowałeś, przechowywanie list rozdzielanych przecinkami w SQL Server to zły pomysł. Powinieneś mieć tabelę skojarzeń/połączeń z jednym wierszem na nazwę (i innymi kolumnami opisującymi listę, w której się znajduje).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kroczące odchylenie standardowe w SQL Server

  2. Jak wybrać tylko pierwsze wiersze dla każdej unikalnej wartości kolumny?

  3. Jak mogę używać jednej puli połączeń mssql na kilku trasach w aplikacji internetowej Express 4?

  4. Jak wstawić 1000 losowych dat pomiędzy podany zakres?

  5. Najlepszy sposób na przechowywanie dużego ciągu w bazie danych SQL Server?