sql >> Databáze >  >> RDS >> Sqlserver

oddělte hodnotu oddělenou čárkou z tabulky na serveru SQL

Názvy můžete extrahovat pomocí rekurzivního CTE a nějaké analýzy řetězců. Zbytek je jen agregace:

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 jste pravděpodobně zjistili, ukládání seznamů oddělených čárkami na SQL Server je špatný nápad. Měli byste mít asociační/spojovací tabulku s jedním řádkem na jméno (a dalšími sloupci popisujícími seznam, ve kterém se nachází).



  1. Jak používat funkce SQL Server AlwaysOn

  2. Použití ODBC se Salesforce a Azure Active Directory (AD) Single Sign On (SSO)

  3. Zápis položek do databáze MySQL ve Scrapy

  4. Dotaz na stupně separace