现有表两张 请假表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。200004还剩1.5 可以用作下次比较
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。200004还剩1.5 可以用作下次比较
a.leavehours - b.jbhours
from (
select leaveuser,
sum(leavehours) leavehours
from Leave
group by leaveuser) as a
inner join (
select jbuser,
sum(jbhours) jbhours
from jiaban) as b
on a.leaveuser = b.jbuser
from
(
select leaveuser,jiahours=(case when leavetype='补休' then -1*leverhours
else leverhours end)
from leave
union all
select jbuser,jbhours from jiaban
) aa
group by leaveuser
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!