Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
あるフィールドの累計を月ごとにとりたい
投稿日時: 17/06/08 16:59:42
投稿者: naka2009

顧客コード、日付、金額 のテーブルがあります。
 
下記のように入っております。
0123 201701 1000
0123 201702 800
0123 201703 550
0123 201704 1500
0144 201701 800
0144 201702 300
0144 201703 950
 
 
上記のテーブルを、累計というフィールドを一番右端に追加し、このようにしたいです。
 
0123 201701 1000 1000
0123 201702 800 1800
0123 201703 550 2350
0123 201704 1500 3850
0144 201701 800 800
0144 201702 300 1100
0144 201703 950 2050
 
月でリセットする必要はありません。
現在まで、毎月、その月までの累計を出したいです。
クエリで、サブクエリを使用するとどのように書けばよいでしょうか。

回答
投稿日時: 17/06/08 19:24:18
投稿者: Suzu

こんにちは。
 
 
累計値を算出するクエリー
http://www.moug.net/tech/acopr/0040020.html
 
サブクエリ と言うか、DSUMの定義域集計関数 を使う例です。
サブクエリを使う分でも、条件式 としては参考になります。
 
今回は、顧客コード毎に日付順の累計が必要なのでしょうから、
サブクエリのWHERE句としては、
 
顧客コード = テーブル名.顧客コード AND 日付 <= テーブル名.日付
 
 になりますね。
 
ここで、「=」の 左辺と右辺で何が違うのって話になります。
テーブルに別名を付ける事で 指定するテーブルを明確にします。
 
サブクエリを使ってクエリを別のクエリ内または式内に入れ子にする
https://support.office.com/ja-jp/article/%E3%82%B5%E3%83%96%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E5%88%A5%E3%81%AE%E3%82%AF%E3%82%A8%E3%83%AA%E5%86%85%E3%81%BE%E3%81%9F%E3%81%AF%E5%BC%8F%E5%86%85%E3%81%AB%E5%85%A5%E3%82%8C%E5%AD%90%E3%81%AB%E3%81%99%E3%82%8B-01d7edd6-964e-4372-9334-5e52e4fe4871

投稿日時: 17/06/09 09:51:13
投稿者: naka2009

Suzuさん コメントありがとうございます。
 
累計: (select sum(金額) from テーブル名 AS S where S.顧客コード = テーブル名.顧客コード AND S.日付 <= テーブル名.日付)
 
と試行錯誤で書いてみましたら、それらしいのが出ました!
 
貼っていただいたリンクの式と、where句のヒントが役立ちました。
これで正解でしたら閉じようと思うのですが、改善点などありますでしょうか?
 

回答
投稿日時: 17/06/09 11:15:43
投稿者: Suzu

当方が意図していた サブクエリとしては 同じ物です。
 
でも、正解 かと問われると。。
・意図した通りの結果が得られるか
・処理速度として使用に耐えうるか
  :
で、naka2009 さんに判断して頂ければよいかと。
 
 
引っかかっている部分として、処理速度です
今回は、「月でリセットする必要はありません。」なので、テーブルの全データに対して
カレントレコード毎の計算を行う事になります。
今は速度的に問題ないと思いますが、将来的に遅く感じる事になる可能性があります。
 
  ・別テーブルに前月末までの累計値を月毎に持たせておき
    前月までの累計値」+ 当月の月初からの累計値
  ・クエリにて計算させるのではなく、テーブルに累計値を持たせる
      :
 等、そのクエリの使用頻度や、データの入力量 等により決める事項になります。

投稿日時: 17/06/09 17:10:58
投稿者: naka2009

Suzuさん コメントありがとうございます。
 
別の質問にも迅速にお答えいただき、大変助かりました。