1

ここに私が持っているものがあります:

SELECT   Count(*) AS cnt 
FROM     tblOccurrence AS x 
WHERE    (((x.OccurrenceDate) Between DateAdd('m',-6,Date()) And Date()) 
         AND ((Exists ( SELECT * 
                        FROM tblOccurrence AS y 
                        WHERE y.TechID = x.TechID AND DATEADD ('d', -1, x.[OccurrenceDate]) = y.[OccurrenceDate]))=False) 
                        AND ((x.TechID)= " & Me.tbxTechID.Text & ")) 
GROUP BY x.TechID;

これは、従業員の欠勤の「発生」を計算するために使用されます。従業員が 1 日間無断欠勤した場合、それは 1 回の発生です。5 日間続けて無断であった場合でも、それは 1 回の発生です。

これは、従業員が MF シフトを持っていて、金曜日と月曜日に電話をかけた場合、それは 1 回だけであることが指摘されるまで、完全に機能しています。事態をさらに難しくするために、従業員は非常に大幅にシフトします (MF、火-土、日-月、M-火 & 金-土など) ... そのため、すべての異なるシフトを保持するテーブルを作成しました (約そのうちの 8 つ) には 9 つの列があります。

ID - ShiftName - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday

ShiftName は、短い説明 (Mon-Fri、Tue-Fri、Sun-Thu など) を含むテキスト フィールドであり、曜日の Yes/No フィールドがあります。そして、チェックマークが予定日です。

だから私は2つのことについて皆さんの意見をお待ちしております.

  1. これは、キャプチャする必要があるものをキャプチャする「良い」方法ですか?
  2. 週末をラップするが 1 回の発生としてカウントされる無断欠勤を考慮して、その SQL ステートメントをどのように変更して発生回数を正しくするのでしょうか?
4

1 に答える 1

0

これは、テーブル tblOccurrence に列をもう 1 つ追加することで実装が容易になります。この新しい列を呼び出します。つまり、occurranceCounter. この列にトリガーを入力します。tblOccurence に新しい行を挿入するたびに、このトリガーは発生カウンタ列に値を入力します。

トリガー ロジック : 従業員のシフトを確認し、最後の休暇日、現在の休暇日を確認します。従業員のシフトに基づいて日数が連続している場合は、発生カウンターを最後の休暇の発生カウンターと同じに保ちます。それ以外の場合は、発生カウンターを 1 増やします。

従業員が時間の経過とともにシフト データを変更する場合は、従業員のシフト履歴テーブルを追加すると役立ちます。

于 2012-08-28T01:45:00.120 に答える