读书人

去反复

发布时间: 2013-09-17 13:35:59 作者: rapoo

去重复


dianhao s_name
1001 1,2,3,3,4,5,6,,,
1002 2,7,8,9,10,10


去掉重复和没有值的变成

dianhao s_name
1001 1,2,3,4,5,6
1002 2,7,8,9,10
[解决办法]

create table #tb(dianhao int,s_name varchar(100))
insert into #tb
select 1001,'1,2,3,3,4,5,6'
union all select 1002,'2,7,8,9,10,10'


SELECT distinct dianhao,SUBSTRING([s_name],number,CHARINDEX(',',[s_name]+',',number)-number) as [s_name]
into test
from #tb a, master..spt_values
where number >=1 and type='p'
and number<len([s_name]) and substring(','+[s_name],number,1)=','
go


create function dbo.fn_b(@a varchar(10))
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s=''
select @s=@s+[s_name]+',' from test where dianhao=@a
if len(@s)>0 set @s=left(@s,len(@s)-1)
return (@s)
end


select dianhao,dbo.fn_b(dianhao) as s_name
from test
group by dianhao

drop table #tb,test
drop function dbo.fn_b

/*
dianhao s_name
-----------------------
10011,2,3,4,5
100210,2,7,8,9

*/

读书人网 >SQL Server

热点推荐