2016-12-26 70 views
-3

考勤表重组考勤表逻辑

id | rollno | faculty | date  | PresentAbsent 
---|---------|---------|------------|-------------- 
    1 | RP1201 | ABC  | 12/12/2016 | P 
    2 | RP1202 | ABC  | 12/12/2016 | A 

休假表

Lid | rollno | startdate | enddate | full-half-day | time 
    ----|--------|------------|------------|---------------|--------------- 
    1 | RP1201 | 11/12/2016 | 12/12/2016 | fullday  | Not applicable 
    2 | RP1202 | 12/12/2016 | 12/12/2016 | halfday  | 10.30-11.30 

所需的报表

rollno | totallecture | totalpresent | totalabsent | totalleave | withoutLeave% | withLeave% 
-------|--------------|--------------|-------------|------------|---------------|----------- 
RP1201 | 12   | 6   | 6   | 2   | 50%   | 66.66%   

从上表的逻辑在启动它工作正常,但表项增加系统有更多时间来计算报告。

请帮我改表的逻辑,帮助我在几秒钟

请任何其他建议,将不胜感激

+0

您可以再添加一列来计算每月出现的天数。 – Prajwal

+0

@Prajwal感谢您在哪个表中回复 – Pravin

+0

您可能需要更改整个结构。 – Prajwal

回答

2
  1. 在你Leave表,使用trigger执行报告 。每当插入新的Leave时,该触发器将更新AttendancePresentAbsent=A,其中FDHD
  2. 现在在创建报告时,请考虑使用这些FDHD来计算TotalAbsentTotalLeave

如果您能够找出报告查询,此添加将对其进行一些修改。希望我清楚。如果您有任何问题,请在评论中告诉我。

+0

好吧我会尝试你的解决方案,但有时会离开可能超过一个月不会显示速度问题 – Pravin

+1

如果您在“考勤”表中使用索引,触发性能可能会稍微慢一些,但这是每次假期的一次性事件。 我建议你创建这个或任何其他结构,并尝试一些示例数据,这样你就可以亲自看到性能。同样在你原来的查询中,如果你还没有使用索引。 – Utsav

2

做这样的事情。

创建离开表,离开的总天数。半天,可以使用滚动号码为0.5的外键。 像这样

Lid | rollno | startdate | enddate | full-half-day | time   |numberofdays 
    ----|--------|------------|------------|---------------|---------------|------------ 
    1 | RP1201 | 11/12/2016 | 12/12/2016 | fullday  | Not applicable|2 
    2 | RP1202 | 12/12/2016 | 12/12/2016 | halfday  | 10.30-11.30 |0.5 

该查询像这样(我正在写一个伪代码)后。

select sum(days-of-leave) from LeaveTable where rollnumber=rp1001 

为完全缺席,并提出这样做​​。

select count(presentabsent) as absent from attendence 
where rollnumber=rp1001 and presentabsent=A