2016-12-26 71 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