T-SQL:拆分和聚合逗号分隔值

Mur*_*dvi 1 t-sql csv aggregation sql-server-2008

我有下表,每行都有逗号分隔值:

ID
-----------------------------------------------------------------------------
10031,10042
10064,10023,10060,10065,10003,10011,10009,10012,10027,10004,10037,10039
10009
20011,10027,10032,10063,10023,10033,20060,10012,10020,10031,10011,20036,10041
Run Code Online (Sandbox Code Playgroud)

我需要计算每个ID(一个组).

我只是试图避免游标实现,并在没有游标的情况下难以理解如何做到这一点.

任何帮助,将不胜感激 !

Tar*_*ryn 6

您将需要使用拆分功能:

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;
Run Code Online (Sandbox Code Playgroud)

然后您可以按以下方式查询数据:

select items, count(items)
from table1 t1
cross apply dbo.split(t1.id, ',')
group by items
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle With Demo