• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2003で区分の大きい方を選ぶには)

Access2003で区分の大きい方を選ぶには

このQ&Aのポイント
  • 社員番号ごとに受講区分があります。受講区分に対して大きい方を選ぶためのクエリ設定方法を教えてください。
  • 例えば、社員の受講区分に1と6があった場合は6を抽出し、1がなかった場合は1を抽出する方法を知りたいです。
  • お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#1です。 解釈に間違いがありましたね。 #1では単に最大値を求めていました。 > 1しかなかった場合は1を抽出 と念を押したのは、社員の一覧テーブルが別途あり、 研修を全く受けていない人を1とするのか、と変に考えたためでした。 研修区分を1と6に限定したものなら、#1で示した Max を得ているところの WHERE 条件に 研修区分 IN (1,6) を追加します。 SELECT * FROM ★★ AS Q1 WHERE 研修区分= (SELECT Max(研修区分) FROM ★★ AS Q2 WHERE Q2.社員番号=Q1.社員番号 AND Q2.研修区分 IN (1,6)); のように。 後者についても同様に SELECT Q1.* FROM ★★ AS Q1 INNER JOIN (SELECT 社員番号, Max(研修区分) AS 区分 FROM ★★ WHERE 研修区分 IN (1,6) GROUP BY 社員番号) AS Q2 ON (Q1.社員番号=Q2.社員番号 AND Q1.研修区分=Q2.区分); ※ いろいろな記述方法があると思います。 処理速度について記述されている記事を見つけましたので参考までに グループ内であるフィールドが最大値のレコードを抽出する http://hatenachips.blog34.fc2.com/blog-entry-287.html

yukirin5_2006
質問者

お礼

30246kiku様 ありがとうございます。<(_ _)> 出来ましたぁ~~~~(#^.^#)めちゃくちゃうれしいです。 本当に本当にありがとうございました。 これで業務がはかどります。 説明が不十分で申し訳ございませんでした。 感謝の気持ちでいっぱいです。 ありがとうございました。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

SELECT * FROM 社員 S1 WHERE NOT EXISTS ( SELECT 1 FROM 社員 S2 WHERE S1.社員番号=S2.社員番号 AND S1.研修区分<S2.研修区分 ) でもいけるような。 社員番号にINDEXがあるのならこちらがおすすめです。

yukirin5_2006
質問者

補足

ご教授ありがとうございます。 SELECT 社員マスター.社員番号, 社員マスター.氏名, 社員マスター.研修区分 FROM 社員マスター WHERE (((社員マスター.研修区分)=1 Or (社員マスター.研修区分)=6)); ※ここまでは、クエリで条件を入れた内容だと思います。この後に教えて頂いた 構文を入れると文字がありますと表示されます。※ SELECT * FROM 社員マスター S1 WHERE NOT EXISTS ( SELECT 1 FROM 社員マスター S2 WHERE S1.社員番号=S2.社員番号 AND S1.研修区分<S2.研修区分 ) とやってみるとステートメントの後に文字がみつかりました。と表示されてしまいます。 SQLの知識が全くないので対処方法をご教授頂けないでしょうか?

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> 社員の受講区分に1と6があった場合は6を抽出し、なかった場合は1を抽出 を 社員の研修区分に1と6があった場合は6を抽出し、1しかなかった場合は1を抽出 と解釈 SQLビューでの記述になりますが ★★ 部分をテーブル名で置き換えてください。 SELECT * FROM ★★ AS Q1 WHERE 研修区分= (SELECT Max(研修区分) FROM ★★ AS Q2 WHERE Q2.社員番号=Q1.社員番号); とか SELECT Q1.* FROM ★★ AS Q1 INNER JOIN (SELECT 社員番号, Max(研修区分) AS 区分 FROM ★★ GROUP BY 社員番号) AS Q2 ON (Q1.社員番号=Q2.社員番号 AND Q1.研修区分=Q2.区分); 後者は更新できません。

yukirin5_2006
質問者

補足

ご教授ありがとうございます。 教えて頂いた構文をやってみると1または6の最高値を求めるのではなく 5と7の答えが返ってきました。 1または6の最高値で抽出するにはどうしたら良いでしょうか? お手数ですが、ご教授頂けたら幸いです。 宜しくお願い致します。

関連するQ&A