Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

разделете стойността, разделена със запетая, от таблицата в sql сървъра

Можете да извлечете имената, като използвате рекурсивен CTE и малко анализиране на низове. Останалото е просто агрегиране:

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;

Както вероятно сте разбрали, съхраняването на списъци, разделени със запетая, в SQL Server е лоша идея. Трябва да имате таблица за свързване/свързване с един ред на име (и други колони, описващи списъка, в който се намира).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT INTO @TABLE EXEC @query със SQL Server 2000

  2. Какво да направите за типа на изчакване на ASYNC NETWORK IO?

  3. Как да изберете максимален ред за всяка група в SQL

  4. SqlDataSourceEnumerator.Instance.GetDataSources() не намира локален екземпляр на SQL сървър 2008

  5. Агрегатът може да не се появи в списъка с набори на оператор UPDATE. Ако актуализирате с имена на колони