• ベストアンサー

抽出について

データベース列 社員ID , 氏名 , 講習番号 , 講習名 , 受講年月日 社員300人、講習番号30件くらいです。 このうち、講習番号05番の講習を受けてない人の一覧を表示、印刷したいのですが抽出しようと思い試行錯誤してチンプンカンプン状態です。 ご教授よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

補足の件、了解しました。No2の方法でいいです。 No2にも書きましたように、 SELECT 社員ID, 氏名 FROM 講習履歴 AS Temp WHERE NOT EXISTS ( SELECT * FROM 講習履歴 WHERE 講習番号="05" AND 社員ID=Temp.社員ID ) GROUP BY Temp.社員ID, Temp.氏名; 上記をコピーし、新しいクエリデザインビューで開き、 SQLビューに切り替えて上記をコピーし、貼り付け、 適当な名前で保存してください。 なお、上記ではテーブルの名前が「講習履歴」となって いますが、当該のテーブルの名前がたとえば「テーブル1」 のような名前で保存されているならば、このSQL文の中の テーブル名を「テーブル1」のように書き変えます。たとえば、 SELECT 社員ID, 氏名 FROM テーブル1 AS Temp WHERE NOT EXISTS ( SELECT * FROM テーブル1 WHERE テーブル1="05" AND 社員ID=Temp.社員ID ) GROUP BY Temp.社員ID, Temp.氏名; のように、上記では3箇所変更しています。あるいは 当該のテーブル名「テーブル1」を「講習履歴」に変更 してそのままSQL文中のテーブル名を変更せずに そのままSQL文をコピーし、貼り付けるかです。 検索する講習番号は、 WHERE テーブル1="05" AND 社員ID=Temp.社員ID のところで、「05」と指定しています。「07」ならば、 WHERE テーブル1="07" AND 社員ID=Temp.社員ID とします。 あとは、任意に抽出する番号を指定する方法と レポートにする方法はNo2の通りです。 質問の場合はこのようなクエリを作成します。 集合でいえば「直積」という概念になります。 結構、理解が難しい部類に入ります。 クエリの使い方は分かると思うのですが、大丈夫 ですか? わからないところがあれば補足してください。

maripapa525
質問者

お礼

有難うございます 分かりました。月曜日、会社でやって見ます。 クエリ何とか分かります、トライします。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。 一応、一つのテーブルに 社員ID , 氏名 , 講習番号 , 講習名 , 受講年月日 が、あるものとしています。 もし、社員一覧には社員IDが主キーで、 社員ID , 氏名 のようなものがあり、 講習履歴には、 社員ID , 講習番号 , 講習名 , 受講年月日 があり、それぞれ別テーブルになっているのら補足 してください。 なお、No1での講習履歴のテーブルの社員IDは 主キーではありません。つまり一人の社員が 複数の講習を受ける場合があり、講習履歴には 一人の社員が複数回出てくるものとしています。

maripapa525
質問者

お礼

有難う御座いました。 出来ました! SQLもっと勉強します。

maripapa525
質問者

補足

有難うございます。 全て同じテーブルです。 例えば、01番の社員は5件の講習を受講しているので、5行となっており、02番の社員は1件受講しているので、1行。 20件受講している社員は同じ社員番号で20行となっております。 拙い説明しか出来ずすみません。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

(1) まず、クエリを作成します。 テーブルの名前を「講習履歴」とします。 以下のSQL文を新しいクエリをデザインビューで 開き、SQLビューにして、貼り付けます。 SELECT 社員ID, 氏名 FROM 講習履歴 AS Temp WHERE NOT EXISTS ( SELECT * FROM 講習履歴 WHERE 講習番号="05" AND 社員ID=Temp.社員ID ) GROUP BY Temp.社員ID, Temp.氏名; これだと、氏名もでますが、社員IDだけならば、 SELECT 社員ID, 氏名 のところを、 SELECT 社員ID としてください。 このクエリを適当な名前で保存します。 たとえば、「Qクエリ」とします。 (2) レポートはレポートの新規作成から 「オートレポート表形式」を選択し、 「基になるテーブルまたはクエリの選択」で (1)のクエリを選択し「OK」とすればレポートは 出来上がります。このレポートを適当な名前で 保存します。 なお、Accessでは(1)のSQL文は保存後はAccessの表現に 置き換えられますので、保存後にSQLビューでSQL文を 見ると違った表現になっています。 以上ですが、もし講習番号を任意に置き換えたいならば、 SQL文を以下で保存します。 SELECT 社員ID, 氏名 FROM 講習履歴 AS Temp WHERE NOT EXISTS ( SELECT * FROM 講習履歴 WHERE 講習番号=[検索条件] AND 社員ID=Temp.社員ID ) GROUP BY Temp.社員ID, Temp.氏名; 保存したクエリを開くと「検索条件」というパラメータが 表示されますので、たとえば「05」と入力すると「05」を 受講していない人の社員IDが表示されます。 同様にレポートを開くと同じようなパラメータが表示されます。 したがって任意に検索条件を設定してレポートを印刷する場合は かならずレポートを開いてから条件を入力して印刷してください。 以上です。わからないところがあれば補足してください。

  • okwavehide
  • ベストアンサー率12% (202/1651)
回答No.1

質問内容がチンプンカンプンです。 推察するにこんなことをしたいのでしょう。 (1)講習番号05番のある社員ID を抽出する (2)社員300人の一覧表から、上記(1)で抽出した社員を除く (3)上記で(2)の受講していなかった社員を一覧にして印刷する

maripapa525
質問者

お礼

Access初心者ですので、質問内容がおかしいのはご容赦下さい。 ほぼご回答頂いた通りです。 1,講習番号05の講習を受講していない社員IDを一覧抽出、印刷したいのです。

関連するQ&A

  • Excelで抽出

    初めまして。よろしくお願いします。 Excel2000を使っています。 例えば、 A列     B列   C列   D列 お客様番号  氏名   契約日  生年月日  :      :    :    : という表があるとし、データは2000件ほどあると 思ってください。 1行目から最終行までみて、 『同一氏名』&『同一契約日』&『同一生年月日』の ものを違うシートに表示させたいのですが、 こういうことってExcelで出来るのですか? 出来るのであれば是非教えてください。 質問するのは初めてなので お手柔らかに・・・m(__)m

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

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

  • エクセル2007 データ抽出(関数)について

    教えてください。エクセルシートにて郵便番号と住所が重複しているデータを抽出したいのです。 例)ある顧客の情報として、シート1のA列に、1から10までの新規顧客の氏名、B列には生年月日が入力されています。C列,D列は空白で、E列には全ての顧客(新規顧客を含みます)の氏名、F列には生年月日、G列には郵便番号、H列には住所が入力されています。このふたつの情報の中から、新規顧客データと全ての顧客データの氏名、生年月日が重複している顧客のみ、C列にその郵便番号、D列に住所を表示させたいのです。 OSはXP エクセル2007です。 困っています。よろしくお願いします。

  • 検索値から、その行の抽出。

    検索値から、その行の抽出。 シート1のデータがあります。 シート2のA1に検索値を置き、“あああ”の行をシート2に抽出。 シート2のA列に任意の番号を振った後、その番号順での表示(ピンク部分)を希望。 自分でいろいろと調べて試行錯誤したのですが、 思うようにいかず、ご質問させていただきます。 ご回答よろしくおねがいします。

  • 【エクセル】無作為抽出

    アンケート調査のために無作為抽出をします。 A列に氏名 B列に住所 が 1万件 ほど入力されています。 そこから300件を抽出したいと思います。 それを 別ブック・別シート もしくは 同シートのC列・D列 にそれぞれ抽出した氏名や住所を表示させるにはどのように したらいいのでしょうか。 なるべくマクロ等は使用したくないのですがご教示くだされば 幸いです。どうぞよろしくお願いいたします。 *追伸  =RAND() を使用してオートフィルする方法は理解しています。  A列(氏名)だけを抽出する方法はわかるのですが、それに付随  するB列(住所)を同時に抜き出す方法がないのか困っています。  

  • データベースから複数の行を抽出したい

    エクセル形式のデータベースで、例えば1~100番まで番号がついているデータベースがあるとします。 そのうち、2、5、6、15、29…などのように適当な番号の行だけを抽出したいのですが、 どうすればいいのしょうか?

  • エクセルで、抽出したいデータがあります!!

    エクセルで、抽出したいデータがあります!! 個人で年1回、支給額も支給年月も異なるデータを抽出したいのですが。   支給年月日  H22.4.20  H22.5.15  H22.6.30・・・・ 番号 氏名     4月     5月     6月  ・・・・計 1   A     1000                  1000 2   B                   1500    1500 3   C            1200           1200 上記のような表があり、個人の支給額と支給年月日を抽出するのに、 いちいち上から一つずつ探して以下のような表に記入しています。 番号 氏名  支給額  支給年月日 1   A   1000   H22.4.20 2   B   1500   H22.6.30 3   C   1200   H22.5.15 個人の支給額と支給年月日を簡単に抽出する方法はないでしょうか? よろしくお願いいたします。

  • データベースとデータの抽出について

    データベースとデータの抽出について エクセル2003で以下のような、表を作っています。 データは現在、A列に10000万件程度入っています。 4列目の購入日付データの年、月、日がそれぞれのセル(D2、E2、F2) に分割入力されています。 このデータベースから、氏名と購入日付を基準キー にして、顧客NOと購入日付(1つのセルに結合)、 購入商品を抽出し、シート2に転記していきたいです。 抽出方法は、シート2に以下のような形で検索  表示したいです。 (シート2) 氏名(B1に表示)→C1に入力 抽出開始年月日(D1に表示)→年はE1、月はG1、日はI1に入力  抽出終了年月日(D2に表示)→年はE2、月はG2、日はI2に入力 検索後、表示される顧客NOと購入日付、購入商品は 同じシート2の以下のセルに表示したいです。 顧客NO(L1に表示)→L2から下に表示 購入日付(M1に表示)→M2から下に表示 購入商品(N1に表示)→N2から下に表示 したいです。 日付が分割入力されているため、抽出がうまくできません。 氏名、または名字だけでうまく検索できるコードはあるでしょうか。 どうぞよろしくお願いします。

  • エクセルでの社員管理

    エクセルでデータベースというのか社員番号、氏名、生年月日、住所等 社員ごとに一行ずつ入っています。これを一人1枚の社員台帳を作ることしました。 たとえば、社員番号を入れるとデータベースを元にして、すべて自動的に入るように設定したいのですが、どう設定すればいいのでしょうか?宜しくお願いします。

  • エクセルVBAで、ある文字を含んでいたら別シートに抽出したい

    エクセル2002を使っています。 シート1に  A列に氏名  B列に住所  C列に電話番号 のデータが300件の表があります。 B列を検索してたとえば大阪府があれば、その行(ABC列)をシート2へコピーして抽出したいのです。  VBAを使ってやりたいのですがどうしたらよいでしょうか? よろしくお願いします。