现有表两张 请假表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 可以用作下次比较     

解决方案 »

  1.   

    你们老板够黑的这样抵消select b.jbuser,
           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
      

  2.   

    select leaveusr,sum(jiahours)
    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
      

  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!