【SQL】SELECT文の書き方について

このQ&Aのポイント
  • 【クエリ(Q_Select)】を使用して、指定した条件でデータを抽出する方法について説明します。
  • 具体的には、T_MainテーブルとT_Subテーブルを結合し、T_Subの特定のフィールド列だけを抽出する方法を紹介します。
  • さらに、同じT_Sub.main_idがある場合は、最新のT_Sub.dayのフィールド列のみを抽出する方法についても説明します。
回答を見る
  • ベストアンサー

【Access】SELECT文の書き方について

下記の【クエリ(Q_Select)】を実行すると【現在のクエリ実行結果】のようになりますが、これを下記の【希望するクエリ実行結果】のような表示にしたいと思います。 その為、同じT_Sub.main_idがある場合は、最新のT_Sub.dayのフィールド列のみ抽出し、同じT_Sub.main_idで最新のT_Sub.dayが複数あった場合は一番大きいT_Sub.idのフィールド列を抽出しようと思ったのですが、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【現在のクエリ実行結果】 T_Main.id|field1|T_Sub.id|day|field2 1|A|1|2011/03/01|100 2|A|1|2011/03/02|2000 3|B|2|2011/03/04|400 4|B|2|2011/03/03|500 5|C|3|2011/03/10|300 6|C|3|2011/03/10|200 【希望するクエリ実行結果】 T_Main.id|field1|T_Sub.id|day|field2 2|A|1|2011/03/02|2000 3|B|2|2011/03/04|400 6|C|3|2011/03/10|200 【クエリ(Q_Select)】 SELECT T_Main.id, T_Main.field1, T_Sub.id, T_Sub.day, T_Sub.field2 FROM T_Main INNER JOIN T_Sub ON T_Main.id = T_Sub.main_id; 【テーブル(T_Main)】 id|field1 1|A 2|B 3|C 【テーブル(T_Sub)】 id|main_id|day|field2 1|1|2011/03/01|100 2|1|2011/03/02|2000 3|2|2011/03/04|400 4|2|2011/03/03|500 5|3|2011/03/10|300 6|3|2011/03/10|200 以上、よろしくお願いします。

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

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

ベタベタですが。Q_Selectを そのまま使います。 Q_Select2: SELECT * FROM Q_Select WHERE (((Q_Select.day)=DMax("day","Q_Select","field1 ='" & [field1] & "'"))); Q結果: SELECT * FROM Q_Select2 WHERE (((Q_Select2.field2)=DMin("field2","Q_Select2","field1 ='" & [field1] & "'"))); 一つに出来るのかもしれませんが。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいた記述を試させていただいた所、【希望するクエリ実行結果】のようになっていました。 ただし、これは私の情報提供ミスで申し訳ないのですが、下記が漏れておりました。 1. 日付が空白の可能性があります。 例えばT_Subテーブルのid=1, 2のdayが共に空白の場合、一番大きいT_Sub.idのフィールド列を抽出したいと思います。 2. サンプルで【クエリ(Q_Select)】を作成しましたが、実際にはAccessのVisual Basic上に記載しております。 その為、1つのSQL文で取得できるか、複数のSQL文でもVisual Basic上で動作する形にしたいと思っております。 以上、よろしくお願いします。

iroha_168
質問者

補足

本回答で当初の質問内容は達成されていると思われるため、本件はクローズさせていただき、質問内容の漏れについては別途質問するようにします。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A

  • 【Access】2つのクエリを1つにまとめる方法

    下記のT_Subテーブルでmain_idフィールド毎のdayフィールドの最大値のレコードを取得し、 取得したレコードの中でT_Mainのidフィールドに存在するもののみを表示したいと思い、 下記のQ_T_Sub_SelectクエリとQ_Ansクエリを作成し、 Q_Ansクエリを実行する事で意図した動作になったと思います。 その後、この2つのクエリを1つのクエリにまとめようと思ったのですが、 どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、 ご教示の程よろしくお願いします。 【Q_T_Sub_Selectクエリ】 SELECT T_Sub.* FROM T_Sub WHERE (((T_Sub.id)=(SELECT TOP 1 id FROM T_Sub Q WHERE Q.main_id = T_Sub.main_id ORDER BY day DESC, id DESC ))); 【Q_Ansクエリ】 SELECT T_Main.id, T_Main.field1, Q_T_Sub_Select.id, Q_T_Sub_Select.day, Q_T_Sub_Select.field2 FROM T_Main LEFT JOIN Q_T_Sub_Select ON T_Main.id = Q_T_Sub_Select.main_id; 【Q_Ansクエリの実行結果】 T_Main.id|field1|Q_T_Sub_Select.id|day|field2 1|A|2|     |2000 3|C|6|2011/03/10|200 【テーブル(T_Main)】 id|field1 1|A 3|C 【テーブル(T_Sub)】 id|main_id|day|field2 1|1|     |100 2|1|     |2000 3|2|2011/03/04|400 4|2|2011/03/03|500 5|3|2011/03/10|300 6|3|2011/03/10|200 なお、1つのクエリにまとめたい理由ですが、最終的にはクエリではなく、 Visual Basic上に記述を移植したいと思っているためです。 ちなみに、1つのクエリをVisual Basic上に移植して SQLの実行結果を利用するイメージは何となく分かるため、 2つのクエリを1つにまとめる方法を希望しましたが、 2つのSQL文があってもクエリなどを使用せず、 Visual Basic上への記述のみで動作する方法があれば、そのような方法でも大丈夫です。 以上、よろしくお願いします。

  • ACCESS2007の不思議な現象に困っています!!

    ACCESS2007の不思議な現象に困っています!! ACCESS2007+SharePointで開発を行っております。 SharePointとリンクしているテーブルが1つあり、そのテーブルを基にクエリを実行するのですが、 データベースウインドウを開いた直後にクエリを実行すると0レコードを返します。 再度クエリを実行すると3レコード返します。 (2回目以降は何度実行してもちゃんと3レコードを返します。) 3レコード返すのが正解なのですが、いろいろ調べてみると、どうも複数値フィールド(リンクテーブルの1つのフィールドが複数値フィールド)に対して抽出条件を設定しているところが問題というところまでは分かったのですが、対処法が分からず困っています。 (ちなみに抽出条件は Like "*OOO*" な感じです) あと、自分なりにわかったことなのですが、、、 下記のようなテーブル(例)があったとします。(列Cが複数値フィールドです) SQL: select * from TableA where 列C.Value Like "*1*" 列A      列B     列C ----------------------- 10      100      1 20      200      2 30      300      3 40      400      1,2 50      500      1,3 60      100      2,3 ----------------------- 初回クエリ実行結果 列A      列B     列C ----------------------- 10      100      1 ----------------------- 2回目以降のクエリ実行結果 列A      列B     列C ----------------------- 10      100      1 40      400      1,2 50      500      1,3 ----------------------- どうかご教授の程、よろしくお願い致します。

  • ACCESS2003 数値や文字列のあいまい検索

    フィールド内に入力されている文字列から、「ひらがな」や「英語」が入力されているレコードの抽出について質問です。 ※[ニックネーム]のフィールドは、英数カナ文字が混在しています。 ======================== (テーブル) [ID]  [ランク]  [ニックネーム]  1     A     123456789 2     B     akb48   3     A     ああああ    4     B     987654321     5     C     かかか123   6     B     112233    7     C     445566      8     A     778899xyz    ======================== ☆上記のテーブルから、[ニックネーム]に「ひらがな」が 含まれるレコードの抽出をする。 ======================= [抽出結果] [ID]  [ランク]  [ニックネーム]  3     A     ああああ    5     C     かかか123    ======================== ☆上記のテーブルから、[ニックネーム]に「英語」が 含まれるレコードの抽出をする。 ======================= [抽出結果] [ID]  [ランク]  [ニックネーム]  2     B     akb48    8     A     778899xyz ======================== 上記のように、クエリでの条件を指定して抽出結果を表示させたいのですが、 どうすればよろしいでしょうか? また、クエリだけでは出来ない場合は、SQLで教えていただければ 幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • ACCESSクエリでの結合の仕方・・・SQL文かも

    ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • accessでテーブルに数式を保存し、クエリで演算

    ID,a,b,sikiという4つのフィールドを持つテーブルを元に 下記のような結果となるクエリを作りたいのです。 数式を簡単に変更できるようにテーブルに保存しようと考えています。 テーブル ID  a  b  siki 1   1  2  [a]*100+[b] 2   2  2  [b]-3 3   2  4  [a]-700 クエリ実行結果 ID  kekka 1   102 2    -1 3    -698

  • SELECT~JOIN文での抽出結果の導き出し方

    お世話になりますm(__)m SELECT文でJOINした時の抽出結果を出す方法がわかりません(>_<) たとえば、以下の2つのテーブルがあり、 求めている(欲しい)結果を記します。 テーブル:table_a id|genre| 1 |和食 | 2 |中華 | 3 |イタリアン| 4 |フレンチ| テーブル:table_b table_a_id|etc1|etc2| 123 |aaa |ああ| 23 |bbb |いい| 1 |ccc |うう| 2 |ddd |ええ| 求めている(欲しい)結果 id|genre |etc1|etc2| 1 |和食,中華,イタリアン |aaa |ああ| 2 |中華,イタリアン |bbb |いい| 3 |和食 |ccc |うう| 4 |中華 |ddd |ええ| 上記のような抽出結果を導き出すことは可能なのでしょうか?? 非常に汚い書き方で見にくく申し訳ありませんが、お詳しい方、是非ともご教授のほどお願いしますm(__)m

    • ベストアンサー
    • MySQL
  • 同じフィールドから複数条件のAND条件で抽出する方法

    お世話になります。 同じフィールドから複数条件のAND条件で抽出する方法 DBはAccessです。 フィールド1がA フィールド2がBという条件でしたら Select 抽出フィールド form テーブル where フィールド1=A and フィールド2=B で行っています。 フィールド1がAまたはBでしたら Select 抽出フィールド form テーブル where フィールド1=A or フィールド1=B で行っています。 それではフィールド1がAもBも満たす抽出はどのようにしたら良いのでしょうか。 例: 学生テーブル  フィールド 学生ID、氏名 履修科目テーブル  フィールド 学生ID、同一学生内連番、科目 というテーブル構成で英語、国語のどちらも履修している学生を抽出する場合などです。 2テーブルをリンクしたクエリを作ったのですが、 単にフィールド 学生ID、氏名、同一学生内連番、科目 なのでどちらも履修している学生を抽出できませんでした。 どのようにしたらよろしいのでしょうか。よろしくお願いいたします。

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • PostgresSQL のSQL文について(SELECT) :2

    テーブル図があまりにもずれているため投稿しなおします。 PostgresであるSelect文がわかりません。 以下のテーブルより *KOUMOKU*[テーブル名] SUB1|SUB2|SUB3|SUB4|SUB5|ID_NAME A01  |    |    |    |   |大項目1 A01  |B01  |    |    |   |大項目2 A01  |B01  |C01  |    |   |大項目3 A01  |B01  |C01  |D01  |   |大項目4 大項目1~大項目4の値(ID_NAME)を一気に取得する SELECT文がわかりません。 「大項目1 大項目2 大項目3 大項目4」という検索結果を得たいです。 よろしくお願いいたします。

  • Access 複数テーブルをまとめる

    こんにちは! 過去記事を検索しましたが、該当がなく、苦戦しております… お知恵をお貸し下さいm(__)m テーブル T顧客…顧客ID(主キー)、名前、… T書類1…顧客ID(重複キー有)、書類1ID、… T書類2…顧客ID(重複キー有)、書類2ID、… T書類3…顧客ID(重複キー有)、書類3ID、… T書類4…顧客ID(重複キー有)、書類4ID、…  ・  ・  ・ その他に複数同じような構造のテーブルがあります。 テーブル内には他に様々なフィールドがありますが、同一内容の結合できるフィールドは上記のみです。 上記のテーブルですべての書類IDを取ってきたいのですが、 全テーブルを顧客IDと結合し、選択クエリで抽出すると      顧客ID | 名前 | 書類1ID | 書類2ID | 書類3ID | 書類4ID  1  |  Aさん |  10  |  5 |  20  |  26  1  |  Aさん |  10  |  30 |  20  |  25  1  |  Aさん |  10   |  4 |  20  |  26  1  |  Aさん |  10   |  6 |   20  |  25  2  |  Bさん |  30  |  13 |  25  |  5  2  |  Bさん |  30   |  10 |  26  |  5  2  |  Bさん |  30   |  13 |  26  |  5  2  |  Bさん |  30  |  10 |  25  |  5 のような値が出てきてしまいます…当たり前の結果ですが… やりたいこととして、 (1)一つのテーブルかクエリで抽出 顧客ID   名前   書類1ID   書類2ID   書類3ID   書類4ID  1     Aさん   |  10  |  5  |  20  |  26               |     |  30  |     |  25               |     |  4               |     |  6    2     Bさん   |  30  |  13  |  25  |  5               |     |  10  |  26   のように重複をなくし、 (2)更にまとめたものにしたいです。 顧客ID   名前   書類1ID   書類2ID   書類3ID   書類4ID  1     Aさん     10     5,30,4,6     20     25,26  2     Bさん     30      10,13     25,26     5 最終的に上記にまとまったものをフォームにして、顧客IDごとに抽出し、 顧客ごとの各書類のIDはこれとこれですよ!みたいにしたいのです! 説明が下手で申し訳ありませんm(__)m Access初心者で、独学でコツコツやっているので、知識が乏しいです… 調べてみるとユニオンクエリとかでできるような記事はありますが、 SQL文なども理解ができずに苦戦しております… お手数ですが、ご教示の程 よろしくお願い申し上げます。

専門家に質問してみよう