- 締切済み
マイクロソフトのaccessのクエリについての質問です。
クエリについての質問です。それほどアクセスには詳しいほうではありません。私は会社の総務をしています。よろしくお願いします。 アクセスの社員名簿があるのですが、怪我や産休などで会社を長期休む人がいます。そのためアクセスの社員名簿に「長期休務開始日」と「長期休務終了日」のフィールドを作成しました。 月ごとに社員の在籍人員をカウントするのですが、たとえば2008年4月の在籍人員をカウントする場合、2008年3月31日から2008年5月15日まで怪我で休んだ社員は4月の在籍人員としてカウントしたくありません。逆に2008年3月31日から2008年4月15日に怪我で休んだ社員は4月の在籍人員にカウントしたいです。つまり4月に1日でも会社に出社した社員はカウントしたいです。 このようなカウントを作成するため、「長期休務開始日」と「長期休務終了日」へ入れるクエリはどのようにすればよろしいでしょうか? アクセスに詳しい方よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
No1 optimumsoupです。しろうとですが、趣味で勉強しただけですのでそのおつもりでお聞きください。改めて自分でやってみた結果です。 当方アクセス97です。 1 テーブルはふたつくっておきます。社員名簿テーブルと長期休暇者テーブル 2 ふたつのクエリーで2008/4/1現在の社員と当日休暇中の社員を抽出します。抽出の際退社日や休暇終了日の欄が空白の場合もあるので「または=NULL」を抽出条件に加えます。 3 二つのクエリーの間にリレーションシップを設定します。しゃいんID でつなぎの役をさせます。 4 新しく在職者調査のクエリーをつくり、二つのクエリーを乗せます。ここで抽出条件として、長期休暇者クエリーの社員IDのランを「=NULL」としてこのクエリーを実行すると、そこには休暇をとっていない社員だけが示されます。 説明が下手ですみません。
- CHRONOS_0
- ベストアンサー率54% (457/838)
Accessに限定した問題ではなく 2つの期間に重なる部分があるかどうかを判断するロジックですね 期間Aの開始が期間Bの終了より小さい AND 期間Aの終了が期間Bの開始より大きい なら2つの期間には重なりがあります
- keirika
- ベストアンサー率42% (279/658)
仮にテーブル名を社員名簿、フィールドを社員コード・長期休務開始日 ・長期休務終了日とします。 クエリのデザインモードの指定をここで記述するのは難しいので SQLを提示します。 SQLビューで貼り付けて、デザインモードで見てください。 SELECT Count([社員コード]) AS 在籍人員 FROM 社員名簿 WHERE (社員名簿.長期休務開始日<#4/1/2008# AND 社員名簿.長期休務終了日 >#4/30/2008#) OR 社員名簿.長期休務開始日 IS NULL; これは4月の在籍人数を集計したものです。 長期休暇対象者以外の日付は未入力つまりNULLであるとします。 なにかの参考になればよいのですが・・・
1.二つのテーブルに分ける 社員名簿と長期休暇者名簿 社員名簿には氏名、社員ID、採用日、退社日など 長期休暇者名簿には 氏名、社員ID、休暇開始日、休暇終了日など 2.二つのテーブルの間には社員IDによりリレーションを組んでおく必要があります。 3.そこで、たとえば 2008年4月1日勤務した人を抽出するには、クエリーで 社員名簿で採用日が2008年4月1日に等しいかまたはそれより小さく、退社日が2008年4月2日より大きい人を抽出した跡で 4.さらに別のクエリーで長期休暇者名簿で休暇開始日が2008年3月31日に等しいかまたはそれより小さく、かつ、休暇終了日が同年4月2日より大きい人を除けばよいわけです。
補足
optimumsoup様、ご回答ありがとうございます。手順の4のところで質問なのですが、対象の者を「除く」方法は具体的にはどのようにすれば良いのでしょうか? not の演算子ではうまくいかないのですが・・・