• 締切済み

Accessで困ってます

はじめまして。わたしはAccess2003で簡単なデータの管理をするように会社で指示を受けてAccessと格闘しています。でも、どうしてもわからないので、ご指導いただきたいのです。 Access2003のテーブルで No(オートナンバー) 日付(yyyy/mm/dd) 担当者(テキスト) 商品コード(テキスト) 受注数(整数) というテーブルがあります。 このテーブルで、「当日」に「同一の担当者」が「異なった商品」を「複数受注した場合」に「当日一番最初に受注した商品だけ」は「受注数」に「10」加算する。 といったクエリ?マクロ?を作りたいのです。 クエリでできるのか?どうかもわからない初心者ですが、何卒ご指導をお願いいたします。 助けてください。

みんなの回答

noname#140971
noname#140971
回答No.5

多分、条件は、<相方IDより最小IDが小さい場合>でもOK。 のミス!

noname#140971
noname#140971
回答No.4

Access のDLookup関数、DMin関数で列[加算受注数]を生成する方法を・・・。 ID__日付________担当者____商品コード__受注数 _1__2008/06/17__鈴木 一郎_A______________100 _2__2008/06/17__鈴木 一郎_A______________200 _3__2008/06/18__鈴木 一郎_A______________100 _4__2008/06/18__鈴木 一郎_B______________200 クエリ1: 相方ID__最小ID__ID__日付_______担当者____商品コード__受注数 _____0_______1___1__2008/06/17_鈴木 一郎_A______________100 _____0_______2___2__2008/06/17_鈴木 一郎_A______________200 _____4_______3___3__2008/06/18_鈴木 一郎_A______________100 _____3_______3___4__2008/06/18_鈴木 一郎_B______________200 SELECT   DBLookup("ID","受注履歴",        "日付=#" & [日付] & "# AND 担当者='" & [担当者] &        "' AND 商品コード<>'" & [商品コード] & "'",0)        AS 相方ID,   DBMin("ID","受注履歴","日付=#" & [日付] & "# AND 担当者='" & [担当者] & "'")        AS 最小ID,   * FROM 受注履歴; 先ず、相方となる[ID]と最初の[ID]を求めるとやり方が見えてくると思います。 ここまでは、Access のDLookup関数、DMin関数でもOKかと思います。 ただ、ADOでDBLookup関数、DBMin関数を自作すると高速化します。 クエリ2: ID__日付________担当者_____商品コード__受注数__加算受注数 _1__2008/06/17__鈴木 一郎__A______________100___________0 _2__2008/06/17__鈴木 一郎__A______________200___________0 _3__2008/06/18__鈴木 一郎__A______________100__________10 _4__2008/06/18__鈴木 一郎__B______________200___________0 SELECT ID, 日付, 担当者, 商品コード, 受注数, ABS(相方ID>最小ID)*10 AS 加算受注数 FROM クエリ1; 多分、条件は、<相方IDが存在し自らが最小IDである場合>とするのが確実。 多分、条件は、<相方IDが最小IDより小さい場合>でもOK。 ID__日付________担当者_____商品コード__受注数__加算受注数 _1__2008/06/17__鈴木 一郎__A______________100___________0 _2__2008/06/17__鈴木 一郎__A______________200___________0 _3__2008/06/18__鈴木 一郎__A______________100__________10 _4__2008/06/18__鈴木 一郎__B______________200___________0 _5__2008/06/18__鈴木 一郎__C______________300___________0

回答No.3

No.1です。 > 同じ日に2種類以上の商品を売ると、ボーナスとして売上成績を水増しできるんですよね? なるほど! > 真の受注数と区別するために、『ボーナス』フィールド(整数型)を用意することにします。 大賛成です。そうすべきですね。 受注数に10を加算してしまうと、どんどん増えるし(たぶん)、真の受注数が判らなくなってしまい‥‥架空取引になってしまう可能性があります。

noname#110201
noname#110201
回答No.2

おそらく、同じ日に2種類以上の商品を売ると、ボーナスとして売上成績を水増しできるんですよね? その前提で、ちょっと考えてみましょう。 真の受注数と区別するために、『ボーナス』フィールド(整数型)を用意することにします。 後の説明の為に、このテーブルをtbl01という名前だということにします。 以下クエリをいくつか紹介しますが、クエリビルダの画面をここでお見せできないので、SQLで書きます。 クエリのデザインヴュー(あるいはデータシートヴュー)の画面で、左上のボタンで『SQLヴュー』というのがありますので、ここにコピーペーストしてください。 デザインヴューに代えると、おなじみの画面で私のお見せしたいクエリが表示されます。 まず第一のクエリ。仮に、名前を qry01SalseToday としておきます。 このクエリは本日の売上の、担当者別、商品コード別の一覧表になります。 『Noの最小』は後で使うためのものです。 SELECT Min([No]) AS Noの最小, 商品コード, 担当者 FROM tbl01 WHERE (日付)=Date() GROUP BY 商品コード, 担当者; 次にこのクエリをもとに、第二のクエリ qry02PrizeToday を作ります。 このクエリで、本日2種類以上の商品を売った担当者と、その担当者のその日一番最初に売った商品のレコードを抽出しています。 SELECT Min(Noの最小) AS Noの最小の最小, Count(商品コード) AS 商品コードのカウント, 担当者 FROM qry01SalseToday GROUP BY 担当者 HAVING (Count(商品コード))>1; オートナンバー型のNoフィールドの一番若いものを、その日の最初の売上としていますが、多分あまりうまいやり方ではありません。でも、ちょっと情報不足ですので、これで行くことにします。 これがきちんと機能するのは、売り上げた順に入力した場合だけです。順不同で入力した場合は、一番最初に入力した商品にボーナスがつきます。 つぎに qry04AddPrizeTo を作ってください。 SELECT Noの最小の最小, ボーナス INTO tbl02PrizeToday FROM tbl01 INNER JOIN qry02PrizeToday ON tbl01.No = qry02PrizeToday.Noの最小の最小 WHERE (ボーナス)=0; このクエリーを実行させると tbl02PrizeToday というテーブルが作成されます。ボーナスが加算されるべきレコードのリストです。 で、最後のクエリ qry05AddPrize  UPDATE tbl01 INNER JOIN tbl02PrizeToday ON tbl01.[No] = tbl02PrizeToday.Noの最小の最小 SET tbl01.ボーナス = 10; これで、ボーナス分が加算されているはずです。 毎日、みんながその日の売上を入力した後、qry04AddPrizeTo  と qry05AddPrize を順に実行させます。 ただし、データを読み出すときには qry06SalesPrize  SELECT No, 日付, 商品コード,担当者,受注数+ボーナス AS 売上成績 FROM tbl01; を使ってください。 ただ、アクセスに慣れてきたら、ぜひVBAを使って、もっとかっこよくこの機能を実現してください。 その方が、多分、早く動作するはずです。

回答No.1

確認です。  ・ 「当日」とは何ですか? 「同じ日付」ですか?  ・ 「当日一番最初に受注した商品」とは、No が小さい商品ということですか?  ・ この処理を何回も行うと、「一番最初に受注した商品」の受注数がどんどん増えますが‥‥  入力したデータを「変える」のは問題があるのではないかと思います。こうする目的は何なのでしょうか?

関連するQ&A

  • Accessで困ってます

    はじめまして。わたしはAccess2003で簡単なデータの管理をするように会社で指示を受けてAccessと格闘しています。でも、どうしてもわからないので、ご指導いただきたいのです。 Access2003のテーブルで No(オートナンバー) 日付(yyyy/mm/dd) 担当者(テキスト) 商品コード(テキスト) 受注数(整数) というテーブルがあります。 このテーブルで、「当日」に「同一の担当者」が「異なった商品」を「複数受注した場合」に「当日一番最初に受注した商品だけ」は「受注数」に「10」加算する。 といったクエリ?マクロ?を作りたいのです。 クエリでできるのか?どうかもわからない初心者ですが、何卒ご指導をお願いいたします。 助けてください。

  • ACCESSの質問です

    お疲れ様です。 商品名/受注数/在庫数/欠品数で構成した受注情報というテーブルがあります。 テーブル作成クエリで受注数(降順)・在庫数(降順)・欠品数(降順)という3つのテーブルを作成した時に、自動的に1,2,3、とういう様に順位を付けてテーブルを作るにはどうすればいいんでしょう? (それぞれで商品の順位は変わる) 今は一旦エクセルに出力し並べ替え・オートフィルで順位をつけています。

  • ACCESS表示変更について

    20120111 20131203 といったACCESSテーブルにある文字列について、 2012/01/11 2013/12/03 といった、yyyy/mm/ddに 直すことは可能でしょうか。 クエリーを使って構わないのですが。 データの量が多いので一気に変換したい。

  • ACCESS2000 更新クエリで文字を追加・変更したい

    ACCESS2000のマクロでCSVファイルをインポートし、Excelに出力しています。 そこで途中に更新クエリを使い、文字の追加・変更を行いたいのですが何故かうまくいきません。。。 【テーブルA】 フィールド/受注番号(910004292) 【テーブルB】 フィールド/出荷番号(910005232)/製造番号(910005451) 【テーブルC】 フィールド/受注番号(910005232)/製造番号(910005451)/納期(1021) 受注、出荷、製造の各フィールドは先頭に"0"を追加したいです。 910004292→0910004292 納期は2009/10/21となるように、現在の西暦(できれば自動)/と3桁目にスラッシュを入れて、yyyy/mm/dd形式にしたいです。 更新クエリで フィールド:受注番号 テーブル:テーブルA レコードの更新:"0"&[受注番号] と入力してやるとうまくいきました。 同じように横のフィールドに フィールド:受注番号 受注番号 ・・・ テーブル:テーブルA テーブルB ・・・ レコードの更新:"0"&[受注番号] "0"&[受注番号] ・・・ と各テーブルの全てのフィールドを入力して更新すると、 レコードに物凄い数の"0"が追加されてしまいます。 例:0000000000000000910004292 何度も繰り返しているようなのですが、なぜなんでしょうか? 更新クエリを別々に作ればそれぞれうまくいきました。 ひとつのクエリに複数のテーブルのフィールドを入れると駄目です。 また、納期について1021→2009/10/21にうまく変更する方法はありますでしょうか? 分かりにくくて申し訳ありませんが宜しくお願いいたします。

  • Access 一対一リレーションの編集

    こんにちは 現在、Accessと他のソフトとの連携をするために奮闘しています。。。知恵をお貸下さい。 Accessには元々受注テーブルがあります。 主キーID:オートナンバー 受注日:日付型 納期:日付型 図番:テキスト型 数量:数値 単価:数値 とあり、データがすでに存在しています。他のソフトへエクスポートを継続的に行うにあたって 新規にテーブルを作成し、一対一リレーションをしようとしています。 新規テーブルは 主キーID:オートナンバー 取引先コード:テキスト型 担当者コート:テキスト型 区分コード:テキスト型 実出荷日:日付型 エクスポート状況:数値 そして、受注テーブルと新規テーブルのIDを一対一でリレーションしクエリを作成し、エクスポートしようと思っています。 その際、新規テーブルの方はデータが空なのでクエリ結果が得られないと思うのですが。。。 どうやって既存の受注テーブルと一つ一つのレコードを繋げる事が出来ますか❓ 編集方法をどなたか教えて下さい。 素人ですみません。

  • アクセス

    アクセスで悩んでいます。VBAがまだ分からない初心者です。 受注テーブルに…受注ID(オートナンバー)、納期、注文書番号、品名、仕様、台数(1台~40台口で注文あり) 仕様テーブルに…仕様ID(オートナンバー)、仕様品目 受注テーブルの仕様と仕様テーブルのIDでリレーションしてあります。 出荷の梱包が10台以下なので、10台分割して看板が必要です。 方法がまったく分からないのですが、ユニオンクエリで試した所… SELECT*, "10/" & 台数 As ロット数 FROM 受注テーブル WHERE 台数 >= 台数\10 UNION ALLSELECT *, (台数 Mod 10) & "/" & 台数 FROM 受注テーブル WHERE 台数 Mod 10; 上記の結果が… 受注ID 1…1台 1/1,10/1      2…20台 10/20      3…6台 6/6,10/6      4…16台 6/16,10/16 5…18台 8/18,10/18 6…40台 10/40 7…30台 10/30    となってしまいました。 本当は… 受注ID 1…1台 1      2…20台 10/20,10/20 3…6台 6 4…16台 6/16,10/16 5…18台 8/18,10/18 6…40台 10/40,10/40,10/40,10/40 7…30台 10/30,10/30,10/30     となって欲しです。 方法、式…どうしたらいいですか。

  • Access2003で日付や時間の平均を計算

    テーブルに商品の購入時間を ・日付 = yyyy/mm/dd(型は日付) ・時間 = hh:mm:ss(型は日付) の2つのカラムで持っています。 1年間の商品購入テーブルに対して商品毎の特性をクエリで出そうと思いました。 ・時間の平均(何時に買われやすい商品か) ・日付の平均?(何月・どの季節によく買われている商品か) とりあえず、時間の平均をデザインビューで 「集計=平均」でとってみたところ「0.569493210808057」というような数値がでてきました。 日付型の時間(hh:mm:ss)の平均をとる場合、どのようにクエリを設定すればよいでしょうか? また、どの季節に買われているか、というのはAccessで出せるものなのでしょうか? すみませんが、よろしくお願いします。

  • ACCESSの日付形式

    テーブルに日付形式のフィールドがあり、エクスポートすると、形式がyyyy/mm/dd hh:mm:ddになってしまいます。 yyyy/mm/dd形式でエクスポートするには、どのようにしたらよいでしょうか。 VBAのDocmd.TransferTextで行いたいと思います ちなみにAccess97です。 よろしくお願いします

  • access2003初心者です。50商品の在庫管理をしています。

    access2003初心者です。50商品の在庫管理をしています。 作成したのは ・商品テーブル(商品コード、商品名) ・受注テーブル(日付、商品コード、個数) です。 受注テーブルには受注があった商品のデータしか入力していません。 しかしレポートでは、すべての商品を並べて 「受注がない商品については、数量を0」 としてレポートを作成したいと考えています。 レポートを作成するには、「元となるテーブルやクエリが必要になってくる」と本に書いてあったのですが、 この元となるクエリを作成することができません。 作成したいクエリは次のとおりです。   日付   商品 個数 2008/04/01 商品01 2 2008/04/01 商品02 0←このデータ(日付、商品、個数)は受注テーブルにはありません。以下同じ。 ・ ・ ・ ・ ・ ・ 2008/04/01 商品50 2 2008/04/02 商品01 1←ここから日付が翌日になります。 2008/04/02 商品02 1 ・ ・ ・ ・ ・ ・ 2008/04/02 商品50 0 2008/04/03 商品01 2←ここから日付が翌々日になります。 2008/04/03 商品02 2 ・ ・ ・ ・ ・ ・ データがないものに対して、 自動で日付を入力したり、個数を0にしたりしたいのですが、 どのような抽出条件またはSQLなどを書いたらいいのかわかりません。 よろしくお願いします。

  • Access クエリで新規テーブルを作成

    お世話になります。 クエリで新規テーブルを作成することは可能でしょうか。 テーブル作成クエリだと、既存のテーブルで抽出した内容で新規に作成する ことになるかと思います。 今回はまっさらな新規のテーブルを作成したいところです。 例えば、フィールド名とデータ型が  ID オートナンバー  受注日 日付型  商品   テキスト型 の場合だと、どのようになりますでしょうか。 ご教授の程、宜しくお願い致します。