- ベストアンサー
Access データベースの抽出方法を簡単に解説
- Access2010でのデータベース抽出方法について、具体的な手順と注意点を解説します。
- 社員テーブルと人事テーブルを結合し、部署名と氏名を抽出する方法を詳しく紹介します。
- リストボックスに表示するためのクエリ作成の効率的な手法についても解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 結果が正しいのか良く分からないのですが、 SELECT A.社員番号, A.部署名, A.氏名, A.性別, A.血液型 FROM (SELECT 社員テーブル.社員番号, 部署マスタ.部署名, 社員テーブル.氏名, 社員テーブル.性別, 社員テーブル.血液型, 人事テーブル.開始日 FROM ((社員テーブル INNER JOIN 人事テーブル ON 社員テーブル.社員番号 = 人事テーブル.社員番号) INNER JOIN 人事マスタ ON 人事テーブル.人事C = 人事マスタ.人事C) INNER JOIN 部署マスタ ON 人事テーブル.部署名C = 部署マスタ.部署名C WHERE ((Not (人事テーブル.部署名C) Is Null) AND (Not (人事テーブル.開始日) Is Null))) AS A INNER JOIN (SELECT 人事テーブル.社員番号, Max(人事テーブル.開始日) AS 開始 FROM 人事テーブル WHERE ((Not (人事テーブル.部署名C) Is Null)) GROUP BY 人事テーブル.社員番号) AS B ON (A.開始日 = B.開始) AND (A.社員番号 = B.社員番号); とか。
その他の回答 (3)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 人事マスタ紐付け不要です。 最初に全部関連付けて作ったクエリ参考にしたのに消し忘れました。
お礼
なるほどですね。了解です。 大変勉強になりました。 ありがとうございました。
- panacon
- ベストアンサー率31% (214/679)
終了日をKeyにできないのであれば、現在ステータスとして、Yes/NoのKeyをつけて、これが必ず一人にひとつとなるように組み立ててみてはと思います。
補足
別途フラグ付けすれば容易に抽出できることは 分かってます。 なお、実際にフラグを設けなくても抽出はできて おります。 ただ、もっとシンプルにできないか・・という質問です。
- panacon
- ベストアンサー率31% (214/679)
人事テーブルの終了日を厳格に管理すると良いと思います。 退職者以外は、現在の位置が必ずあるので、現在の位置の終了日は、必ずブランクになると思います。個々の終了日のブランクが1つしかできないような工夫をすることを考えた方が良いです。これができれば、人事テーブルと社員テーブルを連結して、抽出キーは、終了日をis null にすれば良いと思います。
補足
panaconさま ご回答ありがとうございます。 終了日Is Nullで抽出できるのであれば質問はしません。 見て頂くと分かると思いますが、退職者(00400)も 抽出しなければなりません。
補足
ushi2015さま ご回答ありがとうございます。 クエリAで開始日と部署名Cが埋まっているレコードを抽出しておく。 ※このクエリだけでは部署移動分のレコードまで抽出される クエリBで社員番号毎に開始日の最大で抽出。 AとBを社員番号と開始日で紐付けて、現状の部署名を表示・・って ことですね。 教えて頂いたSQLでちゃんと正しい結果がでました。 1点確認させて下さい。 クエリAで、人事マスタが紐づいてますが必要でしょうか。