回答編集履歴

2 Q2 Null考慮

sazi

sazi score 17803

2018/05/28 12:55  投稿

Q1
「課金記録」の**支払済**を変更するという処理をエクセルで行うということだと思いますが、「支払い記録」がどの「課金記録」に対する入金なのかがあれば、そもそも**支払済**とういう項目すら不要です。
現状それはないので、入金の累計を使用して、「課金記録」の請求額が充当されるところまでを**支払済**にするという処理を行えば、**支払済**を設定する処理は自動化は可能かと思います。
但し、一部入金などのイレギュラーに対応するためには、どうしても補正的な入力は必要でしょうから変更分だけの更新処理は考慮したほうが良いかもしれません。
Q2
※ちょっと読み違えていたので修正
「今月請求金額合計」を求めたものを結合すればよいかと思います。
「今月請求金額合計」については**支払済**でない今月以前の「課金記録」としています。
```SQL
SELECT 会員マスター.会員番号,会員マスター.名前, Nz(入金額計)-Nz(支払済金額計) AS 預かり金額
    ,今月請求金額合計
    , Nz(今月請求金額合計) as 今月請求金額
FROM ((会員マスター LEFT JOIN (
         SELECT 会員番号, Sum(請求金額) AS 支払済金額計
         FROM  課金記録
         WHERE 支払済=TRUE
         GROUP BY 会員番号
      ) AS Q支払済金額計
      ON 会員マスター.会員番号 = Q支払済金額計.会員番号
     ) LEFT JOIN (
         SELECT 会員番号, Sum(請求金額) AS 今月請求金額合計
         FROM  課金記録
         WHERE 支払済=False and 支払期限<#2018/6/1#
         GROUP BY 会員番号
      ) AS Q今月請求金額合計
      ON 会員マスター.会員番号 = Q今月請求金額合計.会員番号
     ) LEFT JOIN (
         SELECT 会員番号, Sum(入金金額) AS 入金額計
         FROM  支払い記録
         GROUP BY 会員番号
     ) AS Q入金額計
      ON 会員マスター.会員番号 = Q入金額計.会員番号
WHERE (Nz(入金額計)-Nz(支払済金額計))>0
ORDER BY 会員マスター.会員番号
```
1 Q2回答修正

sazi

sazi score 17803

2018/05/28 12:53  投稿

Q1
「課金記録」の**支払済**を変更するという処理をエクセルで行うということだと思いますが、「支払い記録」がどの「課金記録」に対する入金なのかがあれば、そもそも**支払済**とういう項目すら不要です。
現状それはないので、入金の累計を使用して、「課金記録」の請求額が充当されるところまでを**支払済**にするという処理を行えば、**支払済**を設定する処理は自動化は可能かと思います。
但し、一部入金などのイレギュラーに対応するためには、どうしても補正的な入力は必要でしょうから変更分だけの更新処理は考慮したほうが良いかもしれません。
Q2
※ちょっと読み違えていたので修正
「今月請求金額合計」を求めたものを結合すればよいかと思います。
「今月請求金額合計」については**支払済**でない今月以前の「課金記録」としています。
```SQL
SELECT 会員マスター.会員番号,会員マスター.名前, Nz(入金額計)-Nz(支払済金額計) AS 預かり金額
FROM (会員マスター LEFT JOIN (
     ,今月請求金額合計
FROM ((会員マスター LEFT JOIN (
         SELECT 会員番号, Sum(請求金額) AS 支払済金額計
         FROM  課金記録
         WHERE 支払済=TRUE
         GROUP BY 会員番号
      ) AS Q支払済金額計
      ON 会員マスター.会員番号 = Q支払済金額計.会員番号
     ) LEFT JOIN (  
         SELECT 会員番号, Sum(請求金額) AS 今月請求金額合計  
         FROM  課金記録  
         WHERE 支払済=False and 支払期限<#2018/6/1#  
         GROUP BY 会員番号  
      ) AS Q今月請求金額合計  
      ON 会員マスター.会員番号 = Q今月請求金額合計.会員番号  
     ) LEFT JOIN (
         SELECT 会員番号, Sum(入金金額) AS 入金額計
         FROM  支払い記録
         GROUP BY 会員番号
     ) AS Q入金額計
      ON 会員マスター.会員番号 = Q入金額計.会員番号
WHERE (Nz(入金額計)-Nz(支払済金額計))>0
ORDER BY 会員マスター.会員番号
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る