• ベストアンサー
※ 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 どこが、どのように判らんのでしょうか?