こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クエリの作り方

OS:windows2000
Access Version:2002

納品番号ごとの入金予定日を表示させる
クエリの作り方を教えてください。

得意先テーブルのフィールドには 
得意先名/得意先コード/請求締日/支払月/支払日 があります。
 このうち請求締日は、
 5/10/15/20/25/31 以上6種あります。
 支払月は、
 当月払として0、翌月払として1、それ以降5まで設定してあります。
 支払日は、請求締日と同じで6種あります。

受注テーブルのフィールドには、
得意先コード/売上日/納品番号/品名/金額 があります。

以上から、納品番号ごとの入金予定を表示させたいのです。
よろしくお願いします。

投稿日時 - 2008-11-18 09:40:58

QNo.4487868

困ってます

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

クエリのSQLビューに貼り付けてください。

SELECT 納品番号, DateSerial(Year([売上日]),Month([売上日])+[支払月]-(Day([売上日])>[請求締日])-([支払日]=31),IIf([支払日]<>31,[支払日],0)) AS 入金予定日
FROM 受注テーブル INNER JOIN 得意先テーブル ON 受注テーブル.得意先コード = 得意先テーブル.得意先コード;

テーブル名など、ご自分のものと違っていたら修正してください。

投稿日時 - 2008-11-18 14:19:28

お礼

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

投稿日時 - 2008-11-26 12:28:44

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

クエリ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関数は、支払日や請求日を求めるための専用関数です。

投稿日時 - 2008-11-18 11:03:39

お礼

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

投稿日時 - 2008-11-26 12:30:07

得意先: テーブル

[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

これで、売上月は容易に求まります。
そして、支払日も生成することが出来るようになります。

投稿日時 - 2008-11-18 10:52:24

あなたにオススメの質問