windows2000
access2002
在庫テーブル
日付、店番号、商品番号、個数
商品マスタ
商品番号、売価、原価
これらのテーブルを使い以下のクエリ1を作成しました。
日付、店番号、商品番号、在庫原価:個数*原価
さらにこのクエリを使い以下のクエリ2を作成しました。
日付、店番号、在庫原価の合計
クエリ1は実行するとサクっと表示されるのですが、クエリ2は実行してから20秒から30秒待たないと表示されません。現在のレコード320万件です。この件数は2倍から5倍に増える予定ですので、現時点でこの速度では件数が増えたときが心配です。
しかしテーブルは他のシステムでも使用しているので、手を加えることはできません。
なんとかもう少し早く表示させる方法はないでしょうか。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>さらにこのクエリを使い以下のクエリ2を作成しました
クエリ1を元にクエリ2の集計クエリを作ったという事でしょうか?
クエリ1を解せずテーブルを元に集計クエリを作れば少しは早いと思いますが・・
SELECT 在庫テーブル.日付, 在庫テーブル.店番号, 在庫テーブル!個数*[原価] AS 在庫原価
FROM 商品マスタ INNER JOIN 在庫テーブル ON 商品マスタ.商品番号 = 在庫テーブル.商品番号;
または
SELECT 在庫テーブル.日付, 在庫テーブル.店番号, 在庫テーブル!個数*商品マスタ!原価 AS 在庫原価
FROM 商品マスタ INNER JOIN 在庫テーブル ON 商品マスタ.商品番号 = 在庫テーブル.商品番号;
ではどうでしょうか?
テーブル名等そのまま使えるならクエリのSQLビューにコピーして試して見てください。
No.5
- 回答日時:
ヒントだけですがこれは、苦しいですよ。
過去のソフト
基本設計か再検討すべき事案です。
最初のクエリを実行時、320万件すべて一括で処理しているわけではありません。
おそらく数百件程度のレコードぐらいしか処理しません。
必要なところ(表示部前後)のみ処理するのが普通です。
それと異なり、2番目のクエリは、すべてのレコードにアクセス処理が
必要になります。
なんせ累計の計算をしなければなりませんから。
このまま対処をしようとすれば
1.〆の日付(月単位)を決めて月単位の累計テーブルの作成
2.1を利用して、〆以降のみSQLにて作成
3.1と2の数値を合算
もしくは、レコード追加、削除、変更する毎に、
月次累計テーブルへ、数値を計算の後、更新をして
常にこの数値を利用する等
会計ソフトなど、件数が多いソフトでは、月次どころか
日次累計テーブルを作成して速度を上げています。
でも、VBAの知識がたぶん必要になります。
No.4
- 回答日時:
クエリを重ねると処理量は掛け算で増えますから
どうしても遅くなりますね
避ける方法のひとつは、一つ目のクエリの結果を
一時的ななテーブルとして固定することです
もちろん2つ目のクエリを実行する前には
必ずこの一時テーブルを作成しなおす必要があります
No.3
- 回答日時:
#1です。
失礼しました。在庫原価の合計を出すんでしたよね。集計するの忘れてました。SELECT 在庫テーブル.日付, 在庫テーブル.店番号, Sum(在庫テーブル!個数*商品マスタ!原価) AS 在庫原価
FROM 商品マスタ INNER JOIN 在庫テーブル ON 商品マスタ.商品番号 = 在庫テーブル.商品番号
GROUP BY 在庫テーブル.日付, 在庫テーブル.店番号;
で試してみてください。
Accessなら
SELECT 在庫テーブル.日付, 在庫テーブル.店番号, Sum(在庫テーブル!個数*[原価]) AS 在庫原価
FROM 商品マスタ INNER JOIN 在庫テーブル ON 商品マスタ.商品番号 = 在庫テーブル.商品番号
GROUP BY 在庫テーブル.日付, 在庫テーブル.店番号;
でも行けるはずです。
この回答への補足
回答ありがとうございます。
早速試して見ました。
しかし結果は45秒でした。
今までよりも遅かったです。
やはり無理なのでしょうか。
No.2
- 回答日時:
スーツのデザイナーでプログラムに関しては素人ですが...
<在庫テーブル>
ID 日付 店番号 商品番号 個数
1 2006/06/01 1 1 10
2 2006/06/01 1 1 10
3 2006/06/01 2 2 20
4 2006/06/01 3 2 1
<商品マスター>
商品番号 売価 原価
1 \100 \50
2 \200 \100
<クエリーの実行結果>
日付 店番号 在庫原価の合計
2006/06/01 1 1000 <--- (10+10)*\50=\1,000
2006/06/01 2 2000 <--- (20) *\100=\2,000
2006/06/01 3 100 <--- (1)*\100=\100
SELECT DISTINCTROW 在庫テーブル.日付, 在庫テーブル.店番号, Sum([個数]*[原価]) AS 在庫原価の合計
FROM 商品マスタ RIGHT JOIN 在庫テーブル ON 商品マスタ.商品番号=在庫テーブル.商品番号
GROUP BY 在庫テーブル.日付, 在庫テーブル.店番号;
この回答への補足
回答ありがとうございます。
#3の回答と一緒に試して見ました。
しかし結果は50秒でした。
今までよりも遅かったです。
他に方法はないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Access(アクセス) Accessのリンクテーブルのパスを相対パスにする方法について教えて頂きたいです 1 2023/02/08 13:29
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つの表を1つに縦に連結する
-
ODBCで接続するとDBに変更/追加...
-
Accessでテーブル名やクエリ名...
-
Accessクエリでの、LIKE条件
-
Accessレコードの追加や変更が...
-
accessで指定期間の曜日カウン...
-
Accessの追加クエリで既存のテ...
-
Accessでvlookupみたいなことは...
-
デザインビューで、連結式 を...
-
access97のリンクテーブルに...
-
ツリー構造をRDBで表現するには?
-
Accessでテーブルをデータシー...
-
【Access】2つのテーブル 複数...
-
アクセスで消し込みがしたい
-
ACCESSで和暦を西暦に・・・
-
SELECT文でLEFT関数を使うと未...
-
Accessの帳票フォームで重複デ...
-
VBAで複数の数式セルを最終行ま...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
ACCESSに同時アクセス(編集)を...
-
Accessクエリでの、LIKE条件
-
Accessでテーブルからテーブル...
-
access テーブル内のレコード...
-
デザインビューで、連結式 を...
-
2つのテーブルを比較して一致し...
-
3つの表を1つに縦に連結する
-
ACCESSで指定されたテーブルか...
-
Accessレコードの追加や変更が...
-
Accessの追加クエリで既存のテ...
-
Accessでvlookupみたいなことは...
-
SQLで条件指定結合をしたいがNU...
-
ツリー構造をRDBで表現するには?
-
SQLで日付を条件に削除したい
-
リンクテーブルを CopyObject ...
-
Accessのサブフォームで#Name...
-
時間の足し算
-
INSERT時にデータ登録とmaxの発...
-
SQL: SELECT UNIONすると文字数...
おすすめ情報