• ベストアンサー

クエリの作り方

OS:windows2000 Access Version:2002 納品番号ごとの入金予定日を表示させる クエリの作り方を教えてください。 得意先テーブルのフィールドには  得意先名/得意先コード/請求締日/支払月/支払日 があります。  このうち請求締日は、  5/10/15/20/25/31 以上6種あります。  支払月は、  当月払として0、翌月払として1、それ以降5まで設定してあります。  支払日は、請求締日と同じで6種あります。 受注テーブルのフィールドには、 得意先コード/売上日/納品番号/品名/金額 があります。 以上から、納品番号ごとの入金予定を表示させたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

クエリのSQLビューに貼り付けてください。 SELECT 納品番号, DateSerial(Year([売上日]),Month([売上日])+[支払月]-(Day([売上日])>[請求締日])-([支払日]=31),IIf([支払日]<>31,[支払日],0)) AS 入金予定日 FROM 受注テーブル INNER JOIN 得意先テーブル ON 受注テーブル.得意先コード = 得意先テーブル.得意先コード; テーブル名など、ご自分のものと違っていたら修正してください。

00130035h
質問者

お礼

遅くなって申し訳ありません。 完璧に私の要望に応えていただきました。 ありがとうございました。

その他の回答 (2)

noname#140971
noname#140971
回答No.2

クエリ1: クエリ SELECT GetDate(CDATE("2008/11/30"),0,10) AS 支払日; 支払日 2008/11/10 クエリ2: クエリ SELECT GetDate(CDATE("2008/11/30"),1,99) AS 支払日; 支払日 2008/12/31 補足: GetDate関数で求まります。 GetDate(某日付, 月の移動数, 移動後の日付) このように GetDate関数は、支払日や請求日を求めるための専用関数です。

00130035h
質問者

お礼

早々にお返事くださりありがとうございました。 他の方のアドバイスを参考しましたが、Husky2007さんの クエリも勉強してみます。

noname#140971
noname#140971
回答No.1

得意先: テーブル [id]_[得意先名]__[得意先コード]_[請求締日]___[支払月]_____[支払日] __1__鈴木 一郎__K001_____________10______________1:翌月________25 __2__中村 主水__K002_____________99______________2:翌々月_____99 ※末日は99にしています。 受注: テーブル [id]_[得意先_id]_[売上日________]_[納品番号]_[品名__]_[金額] __1_____________1___2008/11/10_______________1__商品A __\1,000 __2_____________1___2008/11/11_______________2__商品B __\2,000 __3_____________2___2008/11/30_______________3__商品B __\2,000 この場合、まず、売上計上月は[納品番号=1]は、2008年11月になります。 この場合、まず、売上計上月は[納品番号=2]は、2008年12月になります。 この場合、まず、売上計上月は[納品番号=3]は、2008年11月になります。 これは、[得意先]![請求締日]と[受注]![売上日]の日付の比較で求められます。 ただし、末締めの場合は、28日、29日、30日、31日と色々と末日があるので工夫が必要です。 そのために、末日=99と定義します。 で、この求まった売上計上月に[支払月]を足して[支払日]に応じて支払日を生成。 これで求まります。 この手のクエリは、ステップを追って攻める必要があろうかと思います。 先ずは、[売上日]は日付を抽出することから・・・。 [イミディエイト] ? 売上日付(CDATE("2008/11/10")) 10 ? 売上日付(CDATE("2008/11/11")) 11 ? 売上日付(CDATE("2008/11/30")) 99 これで、末日も比較できるようになりました。 Public Function 売上日付(ByVal HIDUKE As Date) As Integer   売上日付 = IIf(HIDUKE = GetDate(HIDUKE, 0, 99), 99, Day(HIDUKE)) End Function Public Function GetDate(ByVal Now As Date, _             ByVal Move As Integer, _             ByVal HIDUKE As Integer) As Date                GetDate = DateSerial(DatePart("yyyy", Now), _              DatePart("m", Now) + Move - (HIDUKE = 99), _              HIDUKE * Abs(HIDUKE <> 99)) End Function これで、売上月は容易に求まります。 そして、支払日も生成することが出来るようになります。

関連するQ&A