create table test1 (a varchar(5),b char(8))
insert test1 values('00007','20030728')
insert test1 values('00007','20030729')
insert test1 values('00007','20030730')
insert test1 values('00007','20030731')
insert test1 values('00007','20030801')
insert test1 values('00007','20030804')
insert test1 values('00008','20030714')          
insert test1 values('00008','20030715')
create function fmerg(@a  char(8))
returns char(8)
as
begin
declare @str char(8),@b char(8)
Select @b = b from test1 where b = @a -1
if exists(Select * from test1 where b = @a - 1)
begin
set @b = convert(char(8),@a-1)
set @str = dbo.fmerg(@b)
end
else
set @str = @a
return @str
end
-- 调用
Select a,b,dbo.fmerg(b) from test100007 20030728 20030728
00007 20030729 20030728
00007 20030730 20030728
00007 20030731 20030728
00007 20030801 20030801
00007 20030804 20030804
00008 20030714 20030714
00008 20030715 20030714

解决方案 »

  1.   

    create table test1 (a varchar(5),b char(8))
    insert test1 values('00007','20030728')
    insert test1 values('00007','20030729')
    insert test1 values('00007','20030730')
    insert test1 values('00007','20030731')
    insert test1 values('00007','20030801')
    insert test1 values('00007','20030804')
    insert test1 values('00008','20030714')          
    insert test1 values('00008','20030715')gocreate function fmerg(@a  char(8))
    returns char(8)
    as
    begin
      declare @b char(8)
      set @b=@a
      while exists(select 1 from test1 where datediff(day,b,@b)=1)
        select @b=b from test1 where datediff(day,b,@b)=1
      return @b
    endgo-- 调用
    Select a,b,dbo.fmerg(b) from test1
      

  2.   

    create table test1 (a varchar(5),b char(8))
    insert test1 values('00007','20030728')
    insert test1 values('00007','20030729')
    insert test1 values('00007','20030730')
    insert test1 values('00007','20030731')
    insert test1 values('00007','20030801')
    insert test1 values('00007','20030804')
    insert test1 values('00008','20030714')          
    insert test1 values('00008','20030715')gocreate function fmerg(@a  char(8),@colA varchar(20))
    returns char(8)
    as
    begin
      declare @b char(8)
      set @b=@a
      while exists(select 1 from test1 where datediff(day,b,@b)=1 and a<=@colA)
        select @b=b from test1 where datediff(day,b,@b)=1 and a<=@colA
      return @b
    endgo-- 调用
    Select a,b,dbo.fmerg(b,a) from test1
      

  3.   


    create table test1 (a varchar(5),b char(8))
    insert test1 values('00007','20030728')
    insert test1 values('00007','20030729')
    insert test1 values('00007','20030730')
    insert test1 values('00007','20030731')
    insert test1 values('00007','20030801')
    insert test1 values('00007','20030804')
    insert test1 values('00008','20030714')          
    insert test1 values('00008','20030715')gocreate function fmerg(@a  char(8),@colA varchar(20))
    returns char(8)
    as
    begin
      declare @b char(8)
      set @b=@a
      while exists(select 1 from test1 where datediff(day,b,@b)=1 and a<=@colA)
        select @b=b from test1 where datediff(day,b,@b)=1 and a<=@colA
      return @b
    endgo-- 调用
    Select a,b,dbo.fmerg(b,a) from test1