请看一段测试代码,寻求解决方法.谢谢!
代码:
Create Table #t1(EmployeeID int,WorkOnDate datetime,AskForLeaveType varchar(50),OTType varchar(50),加班 int,status int)
insert #t1(EmployeeID,WorkOnDate,AskForLeaveType,OTType,加班,status)
select 1, '2007-07-06 ', '加班 ', 'A ', '3 ',0 union all
select 1, '2007-07-12 ', '加班 ', 'A ', '4 ',0 union all
select 1, '2007-07-15 ', '加班 ', 'B ', '8 ',0 union all
select 1, '2007-07-18 ', '加班 ', 'A ', '3 ',0
go
Create Table #t2(EmployeeID int,WorkOnDate datetime,AskForLeaveType varchar(50),請假 int,status int)
insert #t2(EmployeeID,WorkOnDate,AskForLeaveType,請假,status)
select 1, '2007-07-21 ', '請假 ', '4 ',0 union all
select 1, '2007-07-27 ', '請假 ', '8 ',0
go
declare @StartDate varchar(10),@EndDate varchar(10)
set @StartDate= '2007-07-01 '
set @EndDate= '2007-07-31 '
declare @EmployeeID int
declare id_cursor cursor for
select EmployeeID from #t1 union select EmployeeID from #t2
open id_cursor
fetch next from id_cursor into @EmployeeID
while @@fetch_Status = 0
begin
declare @i decimal(18,2),@j decimal(18,2)
select @i = isnull(sum(加班),0) from #t1 where WorkOnDate> =@StartDate and WorkOnDate <=@EndDate and EmployeeID = @EmployeeID
select @j = isnull(sum(請假),0) from #t2 where WorkOnDate> =@StartDate and WorkOnDate <=@EndDate and EmployeeID = @EmployeeID
if @i > @j
begin
update #t1
set @j = @j - 加班
,加班 = case when @j > =0 then 0 when @j < 0 and @j + 加班 > 0 then -@j else 加班 end,Status=1
where WorkOnDate> =@StartDate and WorkOnDate <=@EndDate and EmployeeID = @EmployeeID
update #t2 set 請假 = 0,Status=1 where WorkOnDate> =@StartDate and WorkOnDate <=@EndDate and EmployeeID = @EmployeeID
end
else if @i < @j
begin
update #t2
set @i = @i - 請假
,請假 = case when @i > =0 then 0 when @i < 0 and @i + 請假 > 0 then -@i else 請假 end,Status