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

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

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

宜しくお願い致します。 社員番号ごとに何の研修を受けたか、受講区分があります。 例えば 社員の受講区分に1と6があった場合は6を抽出し、なかった場合は1を抽出するには どのようにクエリを設定したら良いでしょうか? どうぞご教授お願い致します。   社員番号 氏名  研修区分     研修名        1    あ    5        Access        1    あ    2           Word        1    あ    4        Outlook        1    あ    1        Excel        2    い    2        Word        2    い    3        PowerPoint        2    い    4        Outlook        2    い    5          Access        2    い    6        Excel応用        2    い    7         その他        2    い    1         Excel        3    う    7         その他        3    う    4          Outlook        3    う    5         Access        3    う    2         Word        3    う    6         Excel応用        3    う    3         PowerPoint        3    う    1         Excel

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

  • ベストアンサー
  • 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

  • アクセス インストラクター

    インストラクターで、エクセル(マクロまで)、ワード、アクセスの基礎から応用までと言われました。 アクセスはクエリーまでといわれましたが、クエリーっていったいどこまでなのかがわかりません。(VBA以外って事なのだろうか??) またアクセスの勉強できるHPあったら教えて下さい。

  • Accessの基礎を学びたい 独学or講習

    Accessはデータを入力する程度で、テーブルやクエリを触ることはありません。 他のアプリケーションについては、Excel→表計算、Word→文章、PowerPoint→提案書・・・ と云った具合に用途が分かりますが、Accessについてはイマイチ分かりません。 「あ~、便利だなぁ」と云った程度です。Excelや桐の応用編だと思っています。 Accessの基礎を学びたいのですが、独学で習得できるものなのでしょうか? 1日みっちり基礎を学ぶ講習がありますが、1万円近くを支払ってまで 受講する意義はあるのでしょうか?しかもたった1日で習得できるのか疑問です。 (金銭、時間面に於いて月に数回スクールに通うことは考えていません) 現在の職場ではAccessを使うことはありませんが、今後の為にも習得しておきたいです。 なお、Excelは中~上級者だと思っています(ここで質問しまくってますが^-^;)

  • アクセスで置換のような機能はありますか?

    アクセスはまったくの初心者です。 最近独学で勉強を始めましたが難しい・・・・ 質問なんですが、 例えば、住所録というテーブルがあったとして、 電話番号が入力されていないデータの(名前・電話番号)のみを抽出して、 抽出された全てのデータの電話番号の欄に『未入力』と表記させたい場合 簡単にできる方法はありませんか? クエリで抽出後、一つ一つ入力していかないとダメなのでしょうか? 他に簡単な方法などがあったら教えてください。 エクセルならオートフィルタで空白のセルを抽出して、すべてコピーしたら良くて、 ワードなら、置換などになるでしょうか。 アクセスでは1つづつ入力またはコピーしないとだめなのでしょうか? すみません・・・かなりの初心者です。 どうぞ、教えてください。

  • アクセスのクエリ 抽出について

    アクセスでクエリを組み、あるデーターベースから会員番号・名前を抽出しようとしています。 数万件ある会員番号から指定された500件を一度に抽出したいのですが、どのようにすればよろしいでしょうか。 この500件の会員番号はランダムで特にクエリを組める条件等もなく、抽出したい会員番号が記載されたエクセル一覧からコピーして、クエリの抽出条件に貼り付けたりしたのですが、うまくいきません。 会員番号を1件づつ、抽出条件に入れていくのも大変なので、いい方法があればと思っております。 基礎的なことかもしれませんが、どなたかご教示いただければ幸いです。 よろしくお願いいたします。

  • SQL文を勉強し始めたのですが質問です。

    受講履歴表(研修コード、社員番号、評価)と、社員マスター(社員番号、氏名、部署番号)という2つの表があるときに、次の2つのSQL文はどちらでも同じでしょうか?それとも違う意味があるでしょうか? SELECT 社員マスター.社員番号, 研修コード, 評価, 氏名 FROM 受講履歴表, 社員マスター WHERE 受講履歴表.社員番号 = 社員マスター.社員番号 SELECT 受講履歴表.社員番号, 以下は上と同じ。 それから、もう一つ分からないのは、アクセスの講習を受けたときは、選択クエリを作るときは、多側のテーブルのフィールドを選んだのですが、SQLの教科書では、社員マスターのフィールドを選ぶように書いてありました。でも理由が書いていないので、なぜそうなのか、よくわかりません。 アクセスの選択クエリと、上のSQL文では、意味が違うのでしょうか?どなたかわかる方、教えていただければありがたいです。

  • ACCESSの使い方

    ACCESS2003を使ってデータ抽出をしようとしています。 エクセルからデータを取り込み、クエリを使って抽出を試みましたがうまくいきません。重複データなどは取り出せます。 取り出せないものは[りんご]、(みかん)といったカッコつきのものです。抽出条件の欄に‘りんご[]’などとも入れてみましたがクエリが実行されず抽出ができません。 どなたかうまく抽出する方法を教えてください。お願いします。

  • Access2003 削除クエリで式1フィールドがドンドン作成される

    Access2003で削除クエリを作成しました。 抽出条件に「Aフォーム」内のトグルボタン「チーム1」(オプショングループ名=商品区分)をクリックした時に、[商品番号]が100より小さいものを、トグルボタン「チーム2」をクリックした時には、[商品番号]が100以上のものを抽出するよう入力しました。 【クエリデザインビューの状態↓】 フィールド  | [商品番号] | AA: [forms]![Aフォーム]![商品区分] 抽出条件 | < 100   | 1 または  | >= 100  | 2 一応上記で削除クエリは思うように実行できたのですが、このクエリを閉じてまた開くとフィールドAAと同じ内容で『式1:』フィールドが作成されてしまいます。また閉じて開くと、同じ内容で『式2:』が、次は『式3:』が…とドンドンと作成されてしまいます。 Access2003以外のAccessでは「式」フィールドは増えなかったです。 この『式~:』フィールドが勝手に作成されないようにするには、どうすればいいのでしょうか?もしくは、最初の削除クエリの作り方がおかしいのでしょうか? 教えて頂きたく、よろしくお願いします。

  • AccessのデータをExcelの決まったフォーマットに出力するには?

    Access2002を使っています。 社員マスターテーブルがあります。 フィールドは「社員番号」「氏名」「かな」「年齢」があります。 クエリで対象になるデータを抽出し、それをExcelの決まったフォーマットに出力させたいです。 希望はフォーム上にマクロのボタンを作ってそれをクリックするとエクセルの決まったフォーマットにデータが出力されるようにしたいのです。 お手数をおかけいたしますが、よろしくご指導ください。_(_^_

  • accessとexcel:互換性?

    エクセルのA列に社員NOがだーっと入っています。 その社員をアクセスで作ったDBから抽出して、ある同じデータをだーっと入れたいのですが。 クエリの抽出条件にA列をコピペしたら横に貼り付けられてしまい、”そんな構文はない”とアクセスに言われてしまいました(:_;) ひとつひとつ入力するしかないの? マクロとかSQL構文とかはまったくの初心者です。 バージョンは共に2002です。 よろしく教えて下さい。

  • Access2002の検索について

    社員マスターテーブル 社員ID   テキスト型 氏名   テキスト型 しめい   テキスト型 部署名   テキスト型 研修マスターテーブル 研修ID   数値型 研修名   テキスト型 受講リストテーブル 受付ID   数値型 受付日   日付時刻型 受講日   日付時刻型 社員ID   テキスト型 研修ID   数値型 研修受付クエリ 社員ID   テキスト型(受講リストテーブル) 氏名   テキスト型(社員マスターテーブル) しめい   テキスト型(社員マスターテーブル) 部署名   テキスト型(社員マスターテーブル) 受付ID   数値型  (受講リストテーブル) 受付日   日付時刻型(受講リストテーブル) 受講日   日付時刻型(受講リストテーブル) 研修ID   数値型(受講リストテーブル) 研修名   テキスト型(研修マスターテーブル) 社員が何の研修を受講したのか履歴がほしかったので「社員マスターテーブル」と「研修受付クエリ」を使ってメインサブフォームを作りました。 やりたい事は、このメインサブフォームに検索のボタンを作りたいのです。 社員IDまたは社員名または受講日のいずれかを入力するし検索ボタンをクリックするとメインサブフォームに結果を出したいのです。 マクロのフィルタ?をやってみたのですがよく意味が分からずできませんでした。 どうぞお手数ですがご教授頂けないでしょうか?