Access もっと簡単な抽出方法はありますか?
お世話になります。
Access2010
抽出方法についてご教示下さい。下記のテーブルがあります。
<社員テーブル>
社員番号 氏名 性別 血液型
00100 山田太郎 男性 A
00200 鈴木一郎 男性 A
00300 田中次郎 男性 B
00400 鈴木花子 女性 O
<人事テーブル>
社員番号 人事C 部署名C 開始日 終了日
00100 1 2000/04/01 2000/04/01
00100 2 2 2000/04/01 2005/03/31
00100 3 1 2005/04/01 2008/04/01
00100 3 3 2008/04/01
00200 1 2005/04/01 2004/04/01
00200 2 1 2005/04/01 2007/03/31
00200 3 3 2008/04/01
00300 1 2010/10/01 2010/10/01
00300 2 2 2010/10/01
00400 1 2011/04/01 2011/04/01
00400 2 1 2011/04/01 2015/03/31
00400 4 2015/03/31 2015/03/31
※人事Cの1(入社)の登録では部署名Cは登録されず、別レコードに
登録されます。
<人事マスタ>
人事C 人事
1 入社
2 人事
3 部署移動
4 退職
<部署マスタ>
部署名C 部署名
1 営業部
2 経理部
3 総務部
最終的にフォーム上のリストボックスに下記にように表示したいところです。
社員番号 部署名 氏名 性別 血液型
00100 総務部 山田太郎 男性 A
00200 総務部 鈴木一郎 男性 A
00300 経理部 田中次郎 男性 B
00400 営業部 佐藤花子 女性 O
下記のようにやって、とりあえず抽出はできたのですが。。
もっとよい方法があればお教え頂けたらと思います。
1.人事テーブルで人事Cが2 or 3で抽出し、グループ化、かつ開始日の最大
でクエリを作成
00100 2008/04/01
00200 2008/04/01
00300 2010/10/01
00400 2011/04/01
2.1のクエリと人事テーブルを社員番号と開始日で紐づけてクエリ作成
社員番号 部署名C 開始日
00100 3 2008/04/01
00200 3 2008/04/01
00300 2010/10/01
00300 2 2010/10/01
00400 2011/04/01
00400 1 2011/04/01
このように、00300と00400については入社のレコードも抽出されて
しまうので、ここでさらに部署名CをIs Not Nullとする。
00100 3 2008/04/01
00200 3 2008/04/01
00300 2 2010/10/01
00400 1 2011/04/01
3.社員テーブルと2のクエリ、部署マスタを紐付けます。
社員テーブル---------2のクエリ---------部署マスタ
(社員番号) (部署名C)
このクエリをリストボックスのソースとしてます。
なお、実際には1と2のクエリはひとつにまとめてます。
SELECT Q.社員番号, 人事テーブル.部署名C
FROM (SELECT 人事テーブル.社員番号, Max(人事テーブル.開始日) AS 開始日の最大 FROM 人事テーブル WHERE (((人事テーブル.人事C)=2 Or (人事テーブル.人事C)=3)) GROUP BY 人事テーブル.社員番号) AS Q INNER JOIN 人事テーブル ON (Q.開始日の最大 = 人事テーブル.開始日) AND (Q.社員番号 = 人事テーブル.社員番号)
WHERE (((人事テーブル.部署名C) Is Not Null));
もっとシンプルに結果を出せるのでは?ということで質問させて
頂いた次第です。
宜しくお願い致します。
お礼
回答ありがとうございます。 少なくともマイナスイメージはないと思います。 親近感が湧いているのでしょうか? 私は今まで男性を含めてココまで共通している方はいなかったのでびっくりしています。 逆に似てないところを探すのも楽しみです。 (あまりないんですけどね・・・)