質問: Q入金額計.会員番号 WHERE (Nz(入金額計)-支払済金額計)>0 ORDER BY 会員マスター.会員番号 ``` しかしこれでは、まだとりあえず「預かり金がゼロ以上の人とその預かり金額」の一覧しか出て来ません(それすら正しくできているか不安ですが)。 これをさらに内部に含んで、「今月請求金額合計がこの預かり金額と同額以下」の人を出さなくてはなならいのですが、SQLを包み込むようなSQLをどうやって書けばいいのかわからず苦闘しています。 どのように書くべきか、ご教示ください。 以上です。 よろしくお願いします。
回答: Q1 「課金記録」の**支払済**を変更するという処理をエクセルで行うということだと思いますが、「支払い記録」がどの「課金記録」に対する入金なのかがあれば、そもそも**支払済**とういう項目すら不要です。 現状それはないので、入金の累計を使用して、「課金記録」の請求額が充当されるところまでを**支払済**にするという処理を行えば、**支払済**を設定する処理は自動化は可能かと思います。 但し、一部入金などのイレギュラーに対応するためには、どうしても補正的な入力は必要でしょうから変更分だけの更新処理は考慮したほうが良いかもしれません。 Q2 ※ちょっと読み違えていたので修正 「今月請求金額合計」を求めたものを結合すればよいかと思います。 「今月請求金額合計」については**支払済**でない今月以前の「課金記録」としています。 ``` 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 会員マスター.会員番号 ```