ACCESSを活用してバスと電車の利用日と利用時刻を結合したい

このQ&Aのポイント
  • ACCESSを使用してバスと電車の利用日と利用時刻を結合する方法について教えてください。
  • バスと電車の利用日が同じで、利用時刻の差が30分以内の人を求める方法を知りたいです。
  • バスと電車を乗り継いだ人の情報を取得する方法を教えてください。
回答を見る
  • ベストアンサー

ACCESSである条件でデータを結合し抽出したいのですが方法がわかりま

ACCESSである条件でデータを結合し抽出したいのですが方法がわかりません。 急ぎで教えていただきたいです。 以下の2つのテーブルがあるとします。 テーブル名:BUS 名前    バス利用日 バス利用時刻  ----------------------------------- A君    20100401   050000     B君    20100415   090000     C君    20100511   063000     C君    20100512   063000     A君    20100401   213000     テーブル名:TRAIN 名前    電車利用日  電車利用時刻 ------------------------------------ A君    20100401    045000 A君    20100401    215000 B君    20100410    130000 C君    20100430    053000 C君    20100513    070000 どちらのテーブルとも日付は数値型で8桁(年月日)、時刻も数値型で6桁(時分秒)です。 欲しいのはバスと電車の利用日が同一で、利用時刻の差が30分以内のものです。 要するに電車とバスを乗継した人をこのような定義に基づいて求めたいです。 以下の結果を返したいと思っております。 名前    バス利用日 バス利用時刻  電車利用日  電車利用時刻 -------------------------------------------------------------- A君    20100401   050000   20100401   045000 A君    20100401   213000   20100401   215000    ちなみに少し厄介なのが利用時刻が数値型ということでしょうか。。。 どなたかご教授ねがいます。

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

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

以下のようなものでどうですか。 SELECT BUS.名前, BUS.バス利用日, BUS.バス利用時刻, TRAIN.電車利用日, TRAIN.電車利用時刻 FROM BUS INNER JOIN TRAIN ON (BUS.バス利用日 = TRAIN.電車利用日) AND (BUS.名前 = TRAIN.名前) WHERE (((Abs(DateDiff("n",CDate(Format([バス利用時刻],"00\:00\:00")),CDate(Format([電車利用時刻],"00\:00\:00")))))<=30)); この場合は夜中をまたがらないだろうということで BUSとTRAINの利用日が同じでかつ同じ人物ということで、 INNER JOIN TRAIN ON (BUS.バス利用日 = TRAIN.電車利用日) AND (BUS.名前 = TRAIN.名前) にし、この中から条件に合うレコードを抜き出す ということです。 なお、 >SELECT BUS.名前, CDate(Format([バス利用日]+[バス利用時刻]/1000000,"0000\/00\/00")) AS >結合用日時 >FROM BUS; の(CDate・・・)の部分は Format(CDate(Format([バス利用日],"0000\/00\/00"))+CDate(Format([バス利用時刻],"00\:00\:00")),"yyyy/mm/dd hh:nn:ss") で出ると思いますが。日付をまたぐ場合は必要です。

jp2tw1kr1
質問者

お礼

なるほどーー!! INNER JOIN TRAIN ON (BUS.バス利用日 = TRAIN.電車利用日) AND (BUS.名前 = TRAIN.名前) をすると要らないカス結合もできるけど、それをWHERE句で条件に合うものだけ抜き出すんですね!! これは思いつきませんでした。ありがとうございます。解決しました。

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

テーブルA: 名前   利用日  利用時刻 ------------------------------------ A君    20100401   045000   電車 A君    20100401   050000   バス A君    20100401   213000   バス A君    20100401   215000   電車 B君    20100410   130000   電車 B君    20100415   090000   バス C君    20100430   053000   電車 C君    20100511   063000   バス C君    20100512   063000   バス C君    20100513   070000   電車 テーブルB: 名前   利用日  利用時刻 ------------------------------------ A君   20100401  045000  電車  050000  バス  213000  バス   215000   電車 B君   20100410   130000   電車 B君   20100415   090000   バス C君   20100430   053000   電車 C君   20100511   063000   バス C君   20100512   063000   バス C君   20100513   070000   電車 対応イメージではこうなんですが・・・・。 テーブルAを作って、テーブルBを作成。

jp2tw1kr1
質問者

お礼

回答ありがとうございました。 テーブルBを作った後にどうすればいいかわからなかったのであとに出た回答を参考にさせていただきました^^

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

深夜0時またいだらどうする? テーブルを参照するクエリを作成し、数値8桁の日付と数値6桁の時刻を編集して、 日付/時刻型列([結合用日時]とでも名づける)を設ける。 で、結合するクエリは上記の2クエリの列[結合用日時]を参照して "30分"を時刻型で加算した範囲内に収まる結合を設ける。

jp2tw1kr1
質問者

補足

回答ありがとうございます。 なるほど、、、、 クエリを作成し日付/時刻型列([結合用日時]とでも名づける)を設けるということは、SQLでどう書いたらいいのでしょうか。 例えば、BUSテーブルを参照するクエリのSQLなら SELECT BUS.名前, CDate(Format([バス利用日]+[バス利用時刻]/1000000,"0000\/00\/00")) AS 結合用日時 FROM BUS; と思ったのですが、返ってきた結果が結合用日時がすべて○月×日の0:00になってました。 日付はうまく認識してるようなんですが、時刻がうまく結合しません。 いい方法ありませんでしょうか。 ちなみに深夜0時をまたぐことは無いです。 言葉足らずで申し訳ございません。

関連するQ&A

  • Accessのクエリで2つのフィールドが同条件の場合に結合したい

    Accessのクエリで2つのフィールドが同条件の場合に結合したい 以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。 【テーブル名:勤怠データ】 氏名│日付│出勤時刻 ────────────────── 鈴木│2/1│8:01 鈴木│2/2│8:02 鈴木│2/3│8:03 高橋│2/1│9:01 高橋│2/2│9:02 高橋│2/3│9:03 【テーブル名:シフト】 氏名│日付│シフト ────────────────── 鈴木│2/1│A 鈴木│2/2│B 鈴木│2/3│A 高橋│2/1│B 高橋│2/2│C 高橋│2/3│B 【クエリ:シフト勤怠データ】←作りたいもの 氏名│日付│シフト│出勤時刻 ────────────────── 鈴木│2/1│A│8:01 鈴木│2/2│B│8:02 鈴木│2/3│A│8:03 高橋│2/1│B│9:01 高橋│2/2│C│9:02 高橋│2/3│B│9:03 氏名と日付のフィールドが一致するときに結合させたいのですが、 デザイン画面でつなげればいいのかわかりません。 ご回答よろしくお願い致します。

  • ACCESS テーブルの結合

    同じmdb内で複数テーブルがあります。(テーブル1から10まで)フィールド名はすべて同じです。それぞれのテーブルのIDは1からオートナンバーになってます。 【例】 テーブル1  フィールド名: ID A B C テーブル2   フィールド名:ID A B C  ・ ・ テーブル10   フィールド名:ID A B C  ひとつのテーブルで管理したいのですが・・・教えてください。

  • Accessでの集計方法について

    まったくのAccess初心者ですが今夜中に以下の集計をやらなければらなず、どなたかお力を貸してください・・・。 テーブルのフィールドが以下のようになっています。 会員種別,プラン,入会日,利用日 a,x,2009/1/1,2009/4/1 b,y,2009/2/1,2009/6/1 c,z,2009/3/1,2009/8/1 a,y,2009/2/1,2009/3/1 b,z,2009/1/2,2009/7/1 c,x,2009/4/1,2009/12/1 このテーブルから会員種別aでプランxの人、かつ入会してから利用までの日数が90日以内は○人、91日以降が×人・・・・といった数値を求めたいのです。 日数の差は DateDiff("d",[入会日],[利用日])で求められたのですが それ以降、やり方がよくわかりません。 勉強不足は百も承知なのですが切羽つまっております・・・。 大変恐縮ですがどなたかご指南をお願いいたします。

  • accessでデータ抽出?の方法

    アクセスの初心者です。 テーブル1 生徒  教科    点数    A    国語   90   A    算数   88 B    国語   89 B    算数   97 C    算数   79 テーブル2 生徒  教科 A   算数 B   国語 テーブル1のデータをもとに、テーブル2における点数を抽出するにはどのようにクエリを作成すればよいのでしょうか。どうぞよろしくお願いします。

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • 2つのフィールドを結合する方法

    こんにちは。 SQL文について質問させていただきます。 SQL Serverで、2テーブルの、2つのフィールドを結合して、結果を出力したいと考えています。 以下条件の場合、どのように命令を記述すればよいのでしょうか? 宜しくお願いします。 テーブル名:SOFT キー:SOFTID、VER 役目:ソフトウェアのマスタです。 テーブル構成:以下 SOFTID VER SOFTNAME A     10  ASOFT A     9   ASOFT B     3   BSOFT C     5   CSOFT C     4   CSOFT テーブル名:PC キー:PCID、SOFTID、VER 役目:PCにインストールしたソフト情報です。 テーブル構成:以下 PCID SOFTID VER 1    A   10  1    B   3 2    C   5 2    C   4 3    B   3 結果 結合キー:SFOTID、VER 役目:PCテーブルを元にし、インストールしたソフトのバージョン、名前を表示します。 PCID SOFTID VER SOFTNAME 1    A   10  ASOFT 1    B   3   BSOFT 2    C   5   CSOFT 2    C   4   CSOFT 3    B   3   BSOFT

  • 【Access2000】抽出条件の設定について

    Access2000の抽出条件について質問です。 下記のようなテーブルがあります。 番号が3桁、5桁のものが混在しています。 ※3桁、5桁以外のものはありません。 キー | 番号 | 名前 001 | 11029 | りんご 002 | 332 | みかん 003 | 10154 | ばなな 番号を加工する条件として、 A. 5桁の場合、頭から2桁目から3桁の値を取る B. 3桁の場合は、そのまま値を取る があります。 フィールドの記述は A. 番号加工後: Mid(Left([番号],2) ,3) というところまでは分かりました。 上記の条件をもとにクエリで実行したいのですが、抽出条件はどのように書けばよろしいでしょうか? 識者の方、ご教示いただけますと幸いです。

  • Access もっと簡単な抽出方法はありますか?

    お世話になります。 Access2010 抽出方法についてご教示下さい。下記のテーブルがあります。 <社員テーブル> 社員番号 氏名   性別  血液型 00100  山田太郎  男性  A 00200  鈴木一郎  男性  A 00300  田中次郎  男性  B 00400  鈴木花子  女性  O <人事テーブル> 社員番号 人事C   部署名C  開始日    終了日 00100   1           2000/04/01  2000/04/01 00100   2     2     2000/04/01  2005/03/31 00100   3     1     2005/04/01  2008/04/01 00100   3     3     2008/04/01 00200   1           2005/04/01  2004/04/01 00200   2     1     2005/04/01  2007/03/31 00200   3     3     2008/04/01 00300   1           2010/10/01  2010/10/01 00300   2     2     2010/10/01 00400   1           2011/04/01  2011/04/01 00400   2     1     2011/04/01  2015/03/31 00400   4           2015/03/31  2015/03/31 ※人事Cの1(入社)の登録では部署名Cは登録されず、別レコードに  登録されます。 <人事マスタ> 人事C 人事  1  入社  2  人事  3  部署移動  4  退職 <部署マスタ> 部署名C  部署名  1    営業部  2    経理部  3    総務部 最終的にフォーム上のリストボックスに下記にように表示したいところです。 社員番号 部署名 氏名   性別 血液型 00100   総務部 山田太郎 男性  A 00200   総務部 鈴木一郎 男性  A 00300   経理部 田中次郎 男性  B 00400   営業部 佐藤花子 女性  O 下記のようにやって、とりあえず抽出はできたのですが。。 もっとよい方法があればお教え頂けたらと思います。 1.人事テーブルで人事Cが2 or 3で抽出し、グループ化、かつ開始日の最大  でクエリを作成   00100 2008/04/01   00200 2008/04/01   00300 2010/10/01   00400 2011/04/01 2.1のクエリと人事テーブルを社員番号と開始日で紐づけてクエリ作成  社員番号  部署名C   開始日    00100    3     2008/04/01  00200    3     2008/04/01  00300          2010/10/01  00300    2     2010/10/01  00400          2011/04/01  00400    1     2011/04/01  このように、00300と00400については入社のレコードも抽出されて  しまうので、ここでさらに部署名CをIs Not Nullとする。  00100    3     2008/04/01  00200    3     2008/04/01  00300    2     2010/10/01  00400    1     2011/04/01 3.社員テーブルと2のクエリ、部署マスタを紐付けます。  社員テーブル---------2のクエリ---------部署マスタ       (社員番号)    (部署名C)  このクエリをリストボックスのソースとしてます。 なお、実際には1と2のクエリはひとつにまとめてます。 SELECT Q.社員番号, 人事テーブル.部署名C FROM (SELECT 人事テーブル.社員番号, Max(人事テーブル.開始日) AS 開始日の最大 FROM 人事テーブル WHERE (((人事テーブル.人事C)=2 Or (人事テーブル.人事C)=3)) GROUP BY 人事テーブル.社員番号) AS Q INNER JOIN 人事テーブル ON (Q.開始日の最大 = 人事テーブル.開始日) AND (Q.社員番号 = 人事テーブル.社員番号) WHERE (((人事テーブル.部署名C) Is Not Null)); もっとシンプルに結果を出せるのでは?ということで質問させて 頂いた次第です。 宜しくお願い致します。

  • <Access>2つの抽出条件が合致したデータをもってきたい

    アクセスを勉強中ですがいまいちです。 2つの抽出条件に該当するレコードを抽出させたいのですが、やり方がわかりません。 教えてください! (1)以下のようなテーブルを1枚作成。 職場名、氏名、社員No.、年、月 A-G、本多、012345、2003、10 A-G、鈴木、123456、2003、10 A-G、豊田、234567、2003、10 A-G、本多、012345、2003、11 A-G、鈴木、123456、2003、11 A-G、山羽、934567、2003、11 B-G、夏目、001234、2003、10 B-G、北原、012345、2003、10 B-G、松尾、023456、2003、10 B-G、夏目、001234、2003、11 B-G、北原、012345、2003、11 B-G、松尾、023456、2003、11 C-G、榎本、777012、2003、10 C-G、板垣、770123、2003、10 C-G、伊藤、701234、2003、10 C-G、豊田、234567、2003、11 C-G、板垣、770123、2003、11 C-G、伊藤、701234、2003、11 (2)検索フォームと結果表示フォームの2つを作成 a.結果表示フォーム  bで検索した結果を表示するフォーム(単票形式で個々の情報が表示される) b.検索フォーム  「職場」「日付」のコンボボックスと「検索」ボタンを設置。 要は、検索フォームで2つの条件(職場,日付)に合致した情報をaで表示させたい!! ですが今のところ、"職場"だけは条件通り出てくるのですが、日付が条件として読み取ってくれません。 わかるかたがいましたら、教えて頂きたいです。

専門家に質問してみよう