お世話になっております。
よろしくお願いします。
Accessのファイルに2つのテーブルがあります。
(1)会員マスター
[会員番号(数値・主)]、[氏名]、[ふりがな]、[費目1総額]、[費目2の総額]…[費目15の総額]、[完済(bool)]
(2)課金記録(分割払い計画のようなもの)
[rid(オートナンバー・主)]、[会員番号]、[費目番号]、[金額]、[支払期限]、[支払済(bool)]
(費目番号は1から15だけでなく、支払方法によってかかる事務手数料などの16や30などいろいろある)
定期的に、すべての支払を終えてる人を抽出し一人一人について人が目で見ながら手動で「これで完済であると確認し決定し処理(=[完済]フィールドをTRUEにする)」するための候補リストを作成したいです。
ExcelVBAから、このACCESSファイルにアクセスして、レコードセットを取得して、Excel上で確認作業をします。VBA上でACCESS
抽出の条件ですが、
(1)[名前]が「退会済」でない人(会員番号の重複をさけるため退会者のレコードも残っています)
(2)[完済]がFALSEである人
(3)会員マスターにおける[費目1の総額]から[費目15の総額]の合計金額が、課金記録における[支払済]=TRUEで、費目番号15以下の金額と同額以上である人(ジャスト同額であるはずで、以上というのはありえないはずだけど)
(4)費目番号にかかわらず[支払済]=FALSEのであるレコードの[請求金額]の合計値が0である人
以上の条件をすべて満たす人を、[会員番号]の昇順で取得したいです。
(支払方法や分割回数が決定してからはじめて課金記録テーブルにデータ(各費目ごと分割1回分で1レコード)が作られるので、「課金記録.支払済=Falseのレコードがない人」という単純な条件で抽出することができません。)
どのようにSQLを書いていいのかわからず、とりあえず、
自分なりに書いてみました。
条件(1)(2)(3)を表すものとして、
SELECT 会員マスター.会員番号, 会員マスター.氏名, 会員マスター.[ふりがな], Sum(会員マスター.費目1総額) AS 費目1の合計, Sum(会員マスター.費目2総額) AS 費目2の合計, Sum(会員マスター.費目3総額) AS 費目3の合計, …… ,Sum(会員マスター.費目15総額) AS 費目15の合計, Sum(課金記録.金額) AS 金額の合計, ([費目1の合計]+[費目2の合計]…+[費目15の合計])-[金額の合計] AS 残債 FROM 会員マスター INNER JOIN 課金記録 ON 会員マスター.会員番号 = 課金記録.会員番号 WHERE (((会員マスター.完済)=False) AND ((課金記録.返済済)=True) AND ((課金記録.費目番号)<=15)) GROUP BY 会員マスター.会員番号, 会員マスター.氏名, 会員マスター.[ふりがな] HAVING (((会員マスター.氏名)<>"削除済") AND ([残債]<=0) ORDER BY 会員マスター.会員番号
条件(1)(2)(4)を表すものとして、
SELECT 会員マスター.会員番号, 会員マスター.氏名, 会員マスター.[ふりがな], Sum(課金記録.金額) AS 金額の合計, 課金記録.返済済 FROM 会員マスター INNER JOIN 課金記録 ON 会員マスター.会員番号 = 課金記録.会員番号 WHERE (((会員マスター.完済)=False)) GROUP BY 会員マスター.会員番号, 会員マスター.氏名, 会員マスター.[ふりがな], 課金記録.返済済 HAVING (((会員マスター.氏名)<>"削除済") AND ((Sum(課金記録.金額))=0) AND ((課金記録.返済済)=False))
という2つのSQLができました(これでも、それぞれの条件をしっかり指定できてるかまだ自信がありませんが)。
この2つを合体させるような形で、なんとか1つにまとめらないかと思うのですが、どう書けばよいでしょうか?
あるいは、このように、まずは複数のSQLを作ってから頑張ってまとめようとする方法は間違ってるのでしょうか?
ここまで複雑な条件でも、ひとつのSQL文にまとめられるかどうかもわかりません。
よろしくご教授ください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 17:59
2018/09/13 18:05
2018/09/13 22:55
2018/09/15 06:37