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(一个组).
我只是试图避免游标实现,并在没有游标的情况下难以理解如何做到这一点.
任何帮助,将不胜感激 !
您将需要使用拆分功能:
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)