- ベストアンサー
MSアクセスで、グループごとの抽出方法について教えてください。
MSアクセスで、グループごとの抽出方法について教えてください。 例えば、A,B,C・・・というグループに10人ずつメンバーがいます。グループにはそれぞれ001~0100というようにコードを付けます。そのグループの誰か一人のメンバーを検索したとき、10人を表示させる方法が分かりません。いろんなサイトを調べて見ましたが、それらしいものが無くて。 誰かの名前を入れた時に検索出来る方法が有ればベストなんですが。 検索画面の作り方と、クエリの計算?方法です。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1~#3です。 テーブル名をT_testとしたとき、補足で書かれた単独のテーブルの場合で、下記で良いと思います。 少数のデータでしか試験してありませんので、問題があったら悪しからず。 PARAMETERS 氏名を入力してください Text ( 255 ); SELECT T_test.グループ別, T_test.氏名, T_test.フリガナ, T_test.性別, T_test.住所 FROM T_test WHERE (((T_test.グループ別)=(SELECT グループ別 FROM T_test WHERE 氏名=[氏名を入力してください]))); テーブルの名前、フィールド名等が合っていれば、メニューのクエリ/SQLビューで、直接貼り付けて機能すると思います。
その他の回答 (3)
- mitarashi
- ベストアンサー率59% (574/965)
#1,2です。 前提としているテーブルの構造は#1をご覧下さい。テーブルの構造を開示いただいていないので、自分でやるならこんな感じかなというものです。まず、これを認識していただかないと、話が始まりません。 1.サブクエリと言うのは、クエリの抽出条件に別のクエリが入っているものです。 http://makotowatana.ld.infoseek.co.jp/access/achowUseSqlSelectStatementAsSubqueryDefineFieldDefS.htm 2.T_group というのは#1で前提としたテーブルの一つです。 3.全体のSQL文というのは、クエリをデザインで開いた時、メニューの表示/SQLビューに切り替えた時に表示される物で、クエリ全体を表します。 4.パラメータクエリで検索してお調べ下さい。 http://www.accessclub.jp/actips/tips_84.htm 以上。
補足
テーブルは下記のとおりです。今回テーブルは1つのみで、そのままクエリとします。 テーブル名は「仲間テーブル」クエリ名は「仲間クエリ」とします。 ------------------------- |グループ別コード |氏 名|フリガナ|性別| 住所 | ------------------------- | 10001 |○○太郎| マルマルタロウ| 男 |○○市3-1| ------------------------- | 10001 |○○花子| マルマルハナコ| 女 |○○市3-1| ------------------------- | 10002 |△△一郎|サンカクイチロウ| 男 |○○市2-1| ------------------------- | 10002 |△△ 恵|サンカクメグミ| 女 |○○市2-1| ------------------------- 「仲間クエリ」のデザインビュー、フリガナ欄に式を入れたいのですが。 何回かやってみましたが、やはり式の作り方が下手でうまくいきませんでした。 具体的なSQL文をもう一度教えていただけませんでしょうか?
- mitarashi
- ベストアンサー率59% (574/965)
#1です。サブクエリならパラメータクエリが使えないかなと思ってやってみました。 クエリのgroupCode(テーブルはT_group)の抽出条件に、下記サブクエリを入れます。 (SELECT groupCode from T_menber where name=[名前を入力してください]) ・名前を入力してください - のところは、クエリ/パラメータで文字列型を指定しておきます。 ・[名前を入力してください] は、シングルクォーテーションで囲ってはダメでした。 全体のSQL文としては、下記の通りです。 PARAMETERS 名前を入力してください Text ( 255 ); SELECT T_group.groupCode, T_group.groupName, T_menber.name FROM T_group INNER JOIN T_menber ON T_group.groupCode = T_menber.groupCode WHERE (((T_group.groupCode)=(SELECT groupCode from T_menber where name=[名前を入力してください]))); このクエリを開くと、パラメータの入力/名前を入力してください というダイアログが表示され、 たとえば「斉藤」と入力すると、斉藤さんの所属するグループのメンバー一覧が抽出されます。 ご参考まで。
補足
ありがとうございます。ACCESS初心者の自分にはかなり難解です。もう少し付き合ってください。 1.サブクエリと言うのは、テーブル同士を結合したクエリとは違うのでしょうか? 2.T_group というのはクエリに付けた名前でよろしいのでしょうか? 3.全体のSQL文というのは、クエリをデザインで開いた時抽出条件の中に入れる文でよろしいのでしょうか? 4.やはり、「クエリのgroupCode(テーブルはT_group)の抽出条件に、下記サブクエリを入れます。 (SELECT groupCode from T_menber where name=[名前を入力してください]) ・名前を入力してください - のところは、クエリ/パラメータで文字列型を指定しておきます。」のくだりの部分がまだまだ私の能力では理解が出来ません。 簡単なサンプルを作って貰えると大変有り難いのですが、無理ですよね・・・?
- mitarashi
- ベストアンサー率59% (574/965)
Accessのお勉強のために、試しにやってみました。 下記のTableがあるとします。 T_group:groupCode,groupName T_menber:menberCode,name,groupCode クエリのデザインビューで、T_groupと、T_memberを設定し、T_groupのgroupCode,groupName,T_menberのnameを表示する設定にします。ここで、groupCodeの抽出条件に、次の式を設定します。 =DLookUp("groupCode","T_menber","[name]='斉藤'") これで、斉藤さんの属するグループのメンバーが表示されます。 (同姓同名があり得るので、コード番号を使う方が良いと思いますが) このとき、SQLを表示させると下記の様になります。 SELECT [T_group].[groupCode], [T_group].[groupName], [T_menber].[name] FROM T_group INNER JOIN T_menber ON [T_group].[groupCode]=[T_menber].[groupCode] WHERE ((([T_group].[groupCode])=DLookUp("groupcode","T_menber","[name]='斉藤'"))); 上記は斉藤さん決め打ちなので、パラメータクエリ化が出来ないかやってみましたが、式中の設定はどうも不可の様です。 そこで、上記クエリをQ_testとして保存し、それを元にオートフォーム(帳票フォーム)を作成し,ヘッダー部に非連結のテキストボックスと、コマンドボタンを設けます。このボタンのイベントに、 Private Sub コマンド8_Click() Dim mysql As String mysql = "SELECT [T_group].[groupCode], [T_group].[groupName], [T_menber].[name]" & _ "FROM T_group INNER JOIN T_menber ON [T_group].[groupCode]=[T_menber].[groupCode]" & _ "WHERE ((([T_group].[groupCode])=DLookUp(""groupcode"",""T_menber"",""[name]='" & _ Me.テキスト6.Value & "'"")));" Me.RecordSource = mysql Me.Requery End Sub の様なコードを設定すると、ご希望の事ができると思います。なお、TextBoxのAfterUpdateイベントは動作に再現性がない様なので、仕方なくボタンを設けました。また、 元のクエリの、「斉藤」、空にしておくと、フォームを開いた時には誰も表示されなくなります。 当方Access2000です、少数のデータでしか試験しておりませんので、不具合があったらあしからず。
お礼
ありがとうございました。 いろいろやってみましたが、うまくいかず、(やはり検索でエラーが出て) 自分のやり方が悪いのだとおもいます。 とりあえず、エクセルでしのいでいます。 また、折りを見て挑戦したいと思います。 今回はありがとうございました。