Access (一般機能)

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

 
(Windows 10 Pro : Access 2013)
グループごとに集計をして最新の値を取り出したい
投稿日時: 20/01/17 13:23:06
投稿者: hato

お世話になります。
得意先CDごとに金額の合計を求めて、処理月は最大年月を処理月とします。
K01〜K03は10月から12月で変化はないですが、K04は変わる場合があるので
直近の年月のK04を取り出したいです。
 
得意先ごとに1行ずつ出すSQLにしたいですが、どうしてもK04の種類の分
行が重複してしまいます。
どんなSQLで実現できるでしょうか?
どうぞよろしくお願いします。
 
テーブル
処理月    得意先CD    K01    K02    K03    K04    金額
201912    01111        0    1    0    1    100
201911    01111        0    1    0    2    200
201910    01111        0    1    0    0    300
201912    02222        1    0    0    0    400
201911    02222        1    0    0    0    500
201910    02222        1    0    0    0    600
 
出したい結果
処理月    得意先CD    K01    K02    K03    K04    金額
201912    01111        0    1    0    1    600
201912    02222        1    0    0    0    1500

回答
投稿日時: 20/01/17 14:06:17
投稿者: sk

引用:
得意先CDごとに金額の合計を求めて、処理月は最大年月を処理月とします

引用:
K04は変わる場合があるので直近の年月のK04を取り出したいです。

 
( SQL ビュー)
-------------------------------------------------------------------
SELECT [テーブル名].[得意先CD],
       [得意先別集計].[処理月の最大] AS [処理月],
       [テーブル名].[K01],
       [テーブル名].[K02],
       [テーブル名].[K03],
       [テーブル名].[K04],
       [得意先別集計].[金額の合計] AS [金額]
FROM [テーブル名]
INNER JOIN (SELECT tmp.[得意先CD],
                   Max(tmp.[処理月]) AS [処理月の最大],
                   Sum(tmp.[金額]) AS [金額の合計]
            FROM [テーブル名] AS tmp
            GROUP BY tmp.[得意先CD]) AS [得意先別集計]
 ON [テーブル名].[得意先CD] = [得意先別集計].[得意先CD]
AND [テーブル名].[処理月] = [得意先別集計].[処理月の最大]
ORDER BY [テーブル名].[得意先CD];
-------------------------------------------------------------------
(テーブル名は適宜修正すること)

投稿日時: 20/01/17 15:24:45
投稿者: hato

skさん早速の返信ありがとうございます。
いつもすいません。
 
うまくいきました!!
副問い合わせの中に集計した金額データを含めて、そちらから取り出す
という発想が全然思いつかなかったです。
大変勉強になりました。
ありがとうございました。