sql >> Database >  >> RDS >> Sqlserver

T-SQL:door komma's gescheiden waarden splitsen en aggregeren

U wilt een splitfunctie gebruiken:

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;

En dan kunt u de gegevens op de volgende manier opvragen:

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

Zie SQL Fiddle With Demo



  1. Ionisch raamwerk en php mysql

  2. Ontvang de eerste maandag van een maand in SQLite

  3. Wat betekent Tabel niet optimaliseren, in plaats daarvan opnieuw maken + analyseren?

  4. Waarde berekenen met behulp van de vorige waarde van een rij in T-SQL