• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2003を使って、複数台ある貸出機を製造番号毎にまとめ最新のレコードだけを一覧表に表示させるには???)

Access2003で貸出機を製造番号ごとにまとめて最新のレコードを一覧表に表示する方法は?

このQ&Aのポイント
  • Access2003を使用して、貸出機を製造番号ごとにまとめ、最新のレコードを一覧表に表示したい場合、集計クエリを使用する方法があります。
  • テーブルAとテーブルBを関連付けし、貸出機製造番号ごとにグループ化して最新のレコードを抽出するクエリを作成します。
  • また、貸出日と返却日の条件を判断して「貸出中」と「待機中」を表示するフィールドを設けることもできます。VBAを使うことでより高度な処理も可能です。

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

  • ベストアンサー
noname#60992
noname#60992
回答No.5

>元のテーブルにはそれらの製造番号はあります。 これを製造番号でグループ化したもの(すべての貸出機の製造番号をリストにしたもの)をテーブルBとします。(別にクエリBでもかまいません)そして2番目のクエリを以下のように作り変えてください。 SELECT テーブルB.貸出機製造番号, テーブルA.貸出機管理ID, テーブルA.貸出日, テーブルA.返却日 FROM テーブルB LEFT JOIN (クエリA LEFT JOIN テーブルA ON クエリA.貸出機管理IDの最大 = テーブルA.貸出機管理ID) ON テーブルB.貸出機製造番号 = クエリA.貸出機製造番号; 一回も貸し出したことがないものは貸出機管理ID以下がブランクで表示されるはずです。  テーブルのリレーションシップが理解できれば簡単な問題ですので、そのあたりを勉強されると良いと思います。

375k
質問者

お礼

やっほー、できました!! ようやく望みのものが出来ました。 作成手順、そしてテーブルのリレーションシップとクエリの結合の種類を理解していれば解決できた問題だったんですね。 2ヶ月近くも悩みつづけていたことから解き放されて、と~ってもうれしいです☆ これでようやくじっくりと他のことも勉強することができます。私にはまだまだ基本を学ぶことが大切なようなので、しっかり身に付けたいと思います。 何度も教えていただいて、ありがとうございました。 本当に助かりました。 今後ともよろしくお願いいたします!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.6

>貸出機テーブルを作って、次にどのような作業を行えばいいと思われますか? 待機中を抽出するには貸出機テーブルから作ったクエリの貸出機製造番号の抽出条件欄に Not In (select 貸出機製造番号 from テーブルA where 返却日 is null)

375k
質問者

お礼

待機中のみを抽出するときは、教えていただいた式を使ってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.4

[イミディエイト] ? XferKNumber("99AAA") 1999AAA ? XferKNumber("00BBB") 2000BBB ? XferKNumber("01CCC") 2001CCC Public Function XferKNumber(ByVal KNumber As String) As String   Dim S As String      If Left(KNumber, 2) < "20" Then     S = "20"   Else     S = "19"   End If   XferKNumber = S & KNumber End Function 機械の並び替え部分はミス!よって訂正!

375k
質問者

お礼

度重なる投稿にも関わらず、ご親切にたくさんのアドバイスをいただいて、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#60992
noname#60992
回答No.3

前回とは別案の回答(質問が具体化されたので) 貸出機製造番号でグループ化し、貸出機管理IDの最大値を選ぶクエリを作ります。 (sqlは以下の通りです。 クエリの表示でSQLビューにして確認してください。)  このクエリを クエリAとします。 SELECT Max(テーブルA.貸出機管理ID) AS 貸出機管理IDの最大, テーブルA.貸出機製造番号 FROM テーブルA GROUP BY テーブルA.貸出機製造番号; このクエリとテーブルAを連結(left join)させたクエリを作ります。 sqlは以下の通りです。 出力フィールドや、ユーザー名等はご自分で調整なさってください。 SELECT テーブルA.貸出機管理ID, テーブルA.貸出機製造番号, テーブルA.貸出日, テーブルA.返却日 FROM クエリA LEFT JOIN テーブルA ON クエリA.貸出機管理IDの最大 = テーブルA.貸出機管理ID; これでご希望のデータが取得できるはずです。 No2様のご指摘部分はその通りです。 テーブルに入っていないデータを抽出することはできません。 もうひとつ貸出機テーブルを作成する必要があります。

375k
質問者

お礼

フィールドの項目をたくさん指定して集計クエリを使っていたのが悪かったようです。教えていただいたように、必要な項目に絞り込んで、それをベースに数段階にわけてクエリを作ればよかったんですね。 手順が大切なこともわかりました。 ありがとうございました!

375k
質問者

補足

ご回答ありがとうございます。 貸出機管理IDの最大値のみを抽出することが出来ました。 けれど、私が欲しいのやはり貸出を行ったことのない機械のレコードも含めてなのです。 元のテーブルにはそれらの製造番号はあります。 貸出機テーブルを作って、次にどのような作業を行えばいいと思われますか? ご負担じゃなけば、もう少し教えてください。

全文を見る
すると、全ての回答が全文表示されます。
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

仕様に矛盾があります 貸し出し簿から抽出しても >まったく貸出したことがない機械もあります。 これは抽出できませんよ 貸し出し簿から分かるのは貸し出し中か貸し出したことがあるという情報だけです >製造番号ごとに貸出中なのか待機中なのか一目でわかればいいのです。 これをやるには全貸出機のテーブルが必要です その中から貸し出し中以外を抽出してやれば 待機中の一覧が得られますね 貸出機テーブルから作ったクエリの製造番号の抽出条件欄に In (select 貸出機製造番号 from テーブルA where 返却日 is null)

全文を見る
すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.1

<tab1> 貸出機管理ID__ユーザーNO___貸出機製造番号___貸出日__________返却日 1__________________U101_____________99XVC_____________2007/08/10___2007/08/20 2__________________U102_____________99XVC_____________2007/08/20 3__________________U103_____________01XVB_____________2007/08/22 4__________________U104_____________01XVB_____________2007/08/28 5__________________U104_____________01XVB_____________ <クエリ1> SELECT 貸出機管理ID, ユーザーNO, 貸出機製造番号, 貸出機製造番号, 貸出日, 返却日, (Len([返却日] & "")>0 Or Len([貸出日] & "")=0) AS 待機中, format(100+Left(貸出機製造番号,2)*-1,"00") & Right(貸出機製造番号,3) AS 貸出機製造番号並び順 FROM tab1; 貸出機管理ID__ユーザーNO___貸出機製造番号___貸出日__________返却日__________待機中__貸出機製造番号並び順 1__________________U101_____________99XVC_____________2007/08/10___2007/08/20___-1________01XVC 2__________________U102_____________99XVC_____________2007/08/20______________________0__________01XVC 3__________________U103_____________01XVB_____________2007/08/22______________________0__________99XVB 4__________________U104_____________01XVB_____________2007/08/28______________________0__________99XVB 5__________________U104_____________01XVB___________________________________________________-1________99XVB 相当に簡略化していますが、こういうことでしょうか? [機械の現状]は、[待機中]でYes/Noにしています。 別に、'貸出中'、'待機中'と翻訳するのは手の問題だからよいでしょう。 さて、「製造番号毎に最新のレコードだけを表示させる」の意味が判りません。 並び順はさておいて、通常は、[待機中]が偽='貸出中'は全て表示する筈ですよね。 SELECT * FROM クエリ1 WHERE 待機中=False; 貸出機管理ID__ユーザーNO___貸出機製造番号___貸出日__________返却日__________待機中__貸出機製造番号並び順 2__________________U102_____________99XVC_____________2007/08/20______________________0__________01XVC 3__________________U103_____________01XVB_____________2007/08/22______________________0__________99XVB 4__________________U104_____________01XVB_____________2007/08/28______________________0__________99XVB どこが、どのように判らんのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessでグループ化した中から最新の登録IDのみを抽出して表示するには?

    Access2003を使用しています。 集計クエリでグループ化して、グループのうちの最新のIDのデータ全てを抽出したいのですが、うまくできず大変困っています。 前任者が作成したものを修正していますが、どのような設定で作られているのか把握するだけでも大変なレベルです。 行いたいことは、貸出状況を製造番号別に表示させたいのです。 テーブルには履歴全部が残っています。 フォームで貸出中のみを表示させて、その製造番号のボタンをクリックするとその製造番号が持つデータすべてが見れるようになっています。 フィールドは約10項目あります。 ・「製造番号」フィールドをグループ化 ・他のフィールドは「先頭」 ところが「先頭」「最大」というのはタイミングでターゲットになるデータがかわってしまうようで、正しく抽出してくれません。 「最小」「最大」でもうまくできません。 Accessに詳しい方ならこのような場合、どのような方法をとられますか? 仕組み自体が大幅に変わる方法でも構いませんので、どなたか良いアドバイスをご教示いただけないでしょうか? 以前にも同じ質問をさせていただいておりますが、解決に至らなくて他の方からのアドバイスもいただきたいと思い再び投稿させていただきます。

  • ACCESS クエリ(カウント0のレコードも表示させたい)

    すみません。クエリについて教えて下さい。 <生徒テーブル> 生徒ID・氏名 <出席テーブル> 生徒ID・日付 上記2のテーブルから、クエリで下記の情報を取り出したいのです。 <出席日数> 氏名・出席日数 <出席テーブル>には、1レコードもない生徒がいます。 この生徒は<出席日数>の出席日数を0として表示したいんです。 カウントを使って計算したところ、<出席テーブル>に1レコードもない生徒は表示できません。 説明がわかり難くて申し訳ないです。 どうぞ教えてください。

  • Access テーブルのデータをフォーム上で、検索したい

    こんにちは。Access で簡単な貸出管理データを作っています。 現在、貸出フォームは作ったのですが、 返却フォームを作る際、 今度は、一度テーブルに保存した貸出記録データを 返却フォームで検索して、表示したい場合、どのように したらよろしいでしょうか? 貸出フォームでは、 テーブル1、社員ID、氏名、電話番号 テーブル2、備品ID、備品名、貸出日、返却予定日、 社員ID、氏名、電話番号 これをサブフォームを使ってつくりました。 このテーブル2のデータを返却フォームで検索して、 (備品IDか社員IDで) 表示させたいと思っています。 よろしくお願い致します。

  • Accessで最新のレコードを抽出するには

    お世話になります。 このようなテーブルがあるとします。 No|日時     | 部門  | 更新内容  --+------------+--------+---------- 1 |04/12 12:21:35| A部門 | 更新C 2 |04/07 09:15:05| B部門 | 更新う 3 |04/19 08:23:45| A部門 | 更新A 4 |04/05 10:15:20| B部門 | 更新あ 5 |04/20 09:20:13| B部門 | 更新い 6  |04/02 09:20:15| A部門 | 更新B この中から部門毎にグループ化して 部門毎に日時の最新のデータ No|日時     | 部門  | 更新内容  --+------------+--------+---------- 3 |04/19 08:23:45| A部門 | 更新A 5 |04/20 09:20:13| B部門 | 更新い を抜き出すクエリの作り方を教えてください。 ちなみに今困っているDBの更新内容に相当するフィールドは50フィールドほどあります。 よろしくお願いします。 多分クエリの集計を使用すると思っています。 多少ですがSQLわかります。 多少ですがVBAわかります。

  • [MS Access]クエリで変換 hhmm(数値型)⇒hh:mm(日付/時刻型)

    テーブル上で”930”や”1030”というように数値型になっているデータを、 クエリ上では”9:30”や”10:30”の日付/時刻型へ変換したいと考えております。 この場合、どのようなSQL文で記述をすればよろしいでしょうか? テーブルやフィールは下記のようになっております。 ■テーブル名 tbl_サンプルテーブル ■フィールド名 ID(オートナンバー型) 時刻(日付/時刻型)

  • Access クエリのフィールドに他のクエリの複数条件を満たすレコードの項目を表示させる

    Accessに関する質問です。 クエリの中で、あるフィールドに、 他のクエリの特定の条件を満たすレコードの項目を表示させたいのですがどのような方法があるかお教えいただけますでしょうか? 具体的には下記のようなクエリを組みたいと考えています。 データ元とするクエリの構成: 【フィールド1】社員番号 【フィールド2】時間帯別業務内容 【フィールド3】業務割合 組みたいクエリの構成: 【フィールド1】社員番号:上記クエリの「社員番号」 【フィールド2】業務内容_Aの割合:上記クエリのレコードの中で、フィールド1の「社員番号」と上記クエリの「社員番号」が一致し、かつ「時間帯別業務内容」が"業務内容_A"であるレコードの「業務割合」 【フィールド3】業務内容_Bの割合:フィールド2と同様のロジック 【フィールド4】業務内容_Cの割合:フィールド2と同様のロジック ・・・ ビルドの欄でDlookupを使うのかと考えましたが上手くいきません。 初心者的質問で大変恐縮ではありますが、お教え頂けると助かります。 お手数をおかけしますが、以上よろしくお願いいたします。

  • アクセス2007 複数フィールドで最古日を表示

    以下のテーブルがあります。  フィールドA=受注日付 (日付型 yyyy/mm/dd)  フィールドB=申込日付 (日付型 yyyy/mm/dd)  フィールドC=着手日付 (日付型 yyyy/mm/dd)  フィールドD=”ここに関する質問です。”(日付型 yyyy/mm/dd)  フィールドA~Cの中で、一番昔の日付レコードをフィールドDに表示させるための関数の入れ方が分かりません。  単一フィールドにあるレコードで、最古日、最新日を抽出する方法はほかの質問でも挙がっているのですが、複数フィールドの中から選択肢、新たなフィールドに表示させる方法が中々見当たらず質問させていただきました。  例)   [A]      [B]    [C]       [D] 2011/11/1  2012/1/1 2012/3/1  → 2011/11/1  ※A~Cの中で一番古いのは「A」なので、DにAの日付を表示させる。 何方かご教授、よろしくお願いいたします。

  • 複数フィールドからの最新抽出(ACCESS)

    MS-ACCESS(Ver2003)で売上進捗システムを作っているのですが、以下のように日付フィールドが5つあり、最終対応日に最新日が反映されるようにしたいのですが、どなたか詳しい方いらっしゃいましたら、御教授願います。クエリで何かの条件式を使うのでしょうか? (テーブル構造)イメージです 対応日((1))対応日((2))対応日((3)) 対応日((4))最終対応日                                                  2007 05 14  未入力   未入力    未入力  2007 05 14 2007 06 10 2007 09 20  未入力    未入力  2007 09 20 2007 07 20 2007 10 10 2007 10 30   未入力  2007 10 30 2007 08 02 2007 09 15 2007 10 22 2007 11 15  2007 11 15

  • (アクセス)レポートで作成した番号をフォームに表示できますか?

    QNo.2559017で質問を締め切りましたが再度問題が発生したので 教えて頂きたいと思います。 ---------------------------------------------- 求人テーブル(フォーム)に以下のフィールド(?)があります。 会社名 学科   学科日付   学部  学部日付 A社  学科宛  2006/11/21  学部宛 B社  学科宛         学部宛  2006/11/25 C社  学科宛  2006/11/25  学部宛 D社  学科宛  2006/11/24  学部宛  2006/11/20 ------------------------------------------------------ これを基に、それぞれ日付順に下記のクエリを作成しました。 学科クエリ           学部クエリ 2006/11/21 A社       2006/11/20 D社 2006/11/24 D社       2006/11/25 A社 2006/11/25 C社 そしてそれぞれのレポートを作成し、 教えて頂いた方法で受付番号をつけることができました。 ここまでは良かったのですが、 フォームで会社名を検索して該当する会社名が表示された時に その会社の受付番号を表示することができないのです。 レポートで作成した受付番号をフォームに表示することはできるのでしょうか? 下手な説明で申し訳ありません。 アドバイスお願い致します。

  • 2つのテーブルデータを突合せし、条件に一致したらデータを挿入したい。

    こんばんは。アクセス2003について質問します。 テーブルA  番号  終了日 001 002 003 004 テーブルB 番号 001 002 クエリ1 SELECT テーブルA.番号, テーブルA.終了日 FROM テーブルA INNER JOIN テーブルB ON テーブルA.番号 = テーブルB.番号; このようなテーブル、クエリががあります。 このとき、「テーブルAにある番号をテーブルBに追加したとき、 テーブルAにある追加した番号の「終了日」フィールドに今日の日付を投入する」 と言うことがしたいです。 要するに テーブルBに「003」と入力したら テーブルAの「003」のレコードの終了日フィールドに「2009/2/26」と入力され、 クエリ1を開いたときには 番号   終了日 001 002 003   09/02/26 となるようにしたいです。 マクロ、VBAじゃないと不可能でしょうか? もしくはADOなどでしょうか? ご教授よろしくお願い致します。