22,209
社区成员
发帖
与我相关
我的任务
分享
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