22,300
社区成员




create table 表1(客户名称 varchar(5),相关业务员 varchar(20))
insert into 表1
select '客户A','25,36'
create table 表2(用户号 int,用户名 varchar(6))
insert into 表2
select 25,'张三丰' union all
select 36,'李四民'
go
create function [dbo].[m_split_maco]
(@c varchar(2000),@split varchar(2))
returns varchar(40)
as
begin
declare @t table(col varchar(200))
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
-- SET @c = substring(@c,charindex(' ',@c)+1,len(@c))
end
insert @t(col) values (@c)
declare @sql varchar(2000)
select @sql=isnull(@sql+',','')+b.用户名 from @t a left join 表2 b
on a.col=b.用户号
return @sql
end
select 客户名称,相关业务员=dbo.[m_split_maco](相关业务员,',') from 表1
/*
客户名称 相关业务员
----- ----------------------------------------
客户A 张三丰,李四民
*/
select 客户名称,
相关业务员=stuff((select ','+用户名 from 表2
where charindex(','+用户号+',',','+a.相关业务员+',')>0 for xml path('')),1,1,'')
from 表1 a
with cte as
(
select distinct a.客户名称,substring(a.相关业务员,b.number,charindex(',',a.相关业务员+',',b.number)-b.number) as 业务员
from 表1 a,master..spt_values b
where b.[type] = 'p' and b.number between 1 and len(a.相关业务员)
and substring(','+a.相关业务员,b.number,1)=','
)
select 客户名称,
stuff((select ','+b.用户名 from cte a,表2 b
where a.业务员 = b.用户号 and 客户名称 = t.客户名称 for xml path('')),1,1,'') as 相关业务员
from cte t
group by 客户名称
select 客户名称,
相关业务员=stuff((select ','+用户名 from 表2
where charindex(用户号+',',a.相关业务员+',')>0 for xml path('')),1,1,'')
from 表1 a