现有表两张 请假表leave 加班表jiaban
leave
leaveid leaveuser leavetype leavehours
100001 tom 补休 1.5
100002 red 年假 3
100003 tom 年假 5
100004 tom 补休 6.5
jiaban
jbid jbuser jbhours
200001 tom 2
200002 red 2
200003 tom 3.5
200004 tom 4 要求。 将请假单中的统计时间 与 加班单中的统计时间抵消,只剩下下面的
例如100004 tom 请假类型为补休,请假统计为6.5小时 那么抵消加班单200001 和200003即jb_reset=0。200004中的jb_reset 还剩3 可以用作下次比较 修改加班单
jiaban
jbid jbuser jbhours jb_reset
200001 tom 2 0 2 <6.5 置0
200002 red 2 2
200003 tom 3.5 0 3.5 <(6.5-2) 所以置0
200004 tom 4 3 4>(6.5-2-3.5) 所以为(4-(6.5-2-3.5)_=3
然后下次补休就比较200004 中的3,而不是4!
leave
leaveid leaveuser leavetype leavehours
100001 tom 补休 1.5
100002 red 年假 3
100003 tom 年假 5
100004 tom 补休 6.5
jiaban
jbid jbuser jbhours
200001 tom 2
200002 red 2
200003 tom 3.5
200004 tom 4 要求。 将请假单中的统计时间 与 加班单中的统计时间抵消,只剩下下面的
例如100004 tom 请假类型为补休,请假统计为6.5小时 那么抵消加班单200001 和200003即jb_reset=0。200004中的jb_reset 还剩3 可以用作下次比较 修改加班单
jiaban
jbid jbuser jbhours jb_reset
200001 tom 2 0 2 <6.5 置0
200002 red 2 2
200003 tom 3.5 0 3.5 <(6.5-2) 所以置0
200004 tom 4 3 4>(6.5-2-3.5) 所以为(4-(6.5-2-3.5)_=3
然后下次补休就比较200004 中的3,而不是4!
select
a.jbid,
a.jbuser,
a.jbhours,
case when a.jb_reset<isnull(b.leavehours,0) then 0 else a.jb_reset-isnull(b.leavehours,0) end as jb_reset
from (
select
x.jbid,
x.jbuser,
x.jbhours,
(select sum(jbhours) from jiaban where jbuser=x.jbuser and jbid<=x.jbid) as jb_reset
from
jiaban x
) as a
left join
(select leaveuser,sum(leavehours) as leavehours from leave where leavetype='补休' group by leaveuser) as b
on a.jbuser=b.leaveuser
order by a.jbid
100001 tom 补休 1.5
数据?
create proc Pr_reset
@hours float
as