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

T-SQL:dzielenie i agregowanie wartości oddzielonych przecinkami

Będziesz chciał użyć funkcji podziału:

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX))       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return 
end;

Następnie możesz zapytać o dane w następujący sposób:

select items, count(items)
from table1 t1
cross apply dbo.split(t1.id, ',')
group by items

Zobacz SQL Fiddle z demonstracją



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać Try Catch do wyświetlania błędu logowania dla parametrów połączenia (App.Config)

  2. Policz SQL, aby uwzględnić wartości zerowe

  3. Najszybszy sposób wykonywania zagnieżdżonych wstawek zbiorczych z użyciem scope_identity()?

  4. Jak wstawić rekordy w oparciu o poprzednią wstawkę?

  5. Widok SQL:łączyć tabele bez powodowania duplikowania danych w każdym wierszu?