--测试
create table a(date datetime, onduty varchar(100))
create table b(date datetime, onduty varchar(100))
insert a select '2003-4-4',     '12001;12004;12005;'
insert b select '2003-4-4',     '李在;张中要;刘会同;'
--存储过程
create proc getexpname @date varchar(8)
as
declare @table table(expid int , name varchar(100))
declare @endpos int, @beginpos int
set @beginpos=1
select @endpos=charindex(';',onduty) from a 
where convert(varchar(8),date,112)=@date
declare @endpos1 int, @beginpos1 int
set @beginpos1=1
select @endpos1=charindex(';',onduty) from b 
where convert(varchar(8),date,112)=@datewhile  @endpos<>0
begin
insert @table select substring(a.onduty,@beginpos,@endpos-@beginpos) as expid,
substring(b.onduty,@beginpos1,@endpos1-@beginpos1) as name
from a,b where convert(varchar(8),a.date,112)=@date
and a.date=b.date
select @beginpos=@endpos+1, @endpos=charindex(';',onduty,@endpos+1)
from a where convert(varchar(8),date,112)=@date
select @beginpos1=@endpos1+1, @endpos1=charindex(';',onduty,@endpos1+1)
from b where convert(varchar(8),date,112)=@date
end
select * from @table
--测试
exec getexpname '200340304'--结果
12001 李在
12004 张中要
12005 刘会同

解决方案 »

  1.   

    drop table #Acreate table #A (date datetime,onduty varchar(100))create table #B (empid varchar(5),name varchar(10))insert into #B (empid,name)values('10001','李在')
    insert into #B (empid,name)values('10002','王芳')
    insert into #B (empid,name)values('10003','张忠要')
    select * from #B
    insert into #A(date,onduty)values('2003-01-01','10001;10002;10003')
    insert into #A(date,onduty)values('2003-01-02','10001;10002')select * from #A
    select #a.date,#B.name from #a left join  #b  on  #a.onduty like '%'+#b.empid+'%'下一步就是根据日期分组,把姓名相加了
      

  2.   

    --測試
    create table ta(date datetime,onduty varchar(1000))
    insert into ta values('2003-3-4','12001;12004;12005;')create table tb(EmpID varchar(5),Name varchar(10))
    Insert into tb 
    select '12001','李在;'
    union all select '12002','王芳;'
    union all select '12004','張中要;'
    union all select '12005','阿門;'
    create    function dbo.fn_a(@s varchar(1000))
    returns varchar(1000)
    as
    begin
    declare @a varchar(1000),@b varchar(1000)
    declare @i int
    set @a=''
    set @i=1
    while @i>0
    begin
    select @a=@a+name from tb  where EmpID=substring(@s,@i,5)
    set @i=charindex(';',@s,@i+6)-5
    end
    return(@a)
    end
    --刪除
    drop function dbo.fn_a
    drop table ta
    drop table tb--結果
    select convert(varchar(10),date,120),dbo.fn_a(onduty) as onduty from ta
    date                         Onduty
    ------------------------------------------------------------------
    2003-03-04 李在;張中要;阿門;
      

  3.   

    谢谢各位.马上给分.其中认为 hdhai9451
    (※★山,快馬加鞭未下鞍...☆※) 的符合本人的要求.