プロが教える店舗&オフィスのセキュリティ対策術

説明がうまくできないかもしれません。
やりたいことは、accessクロス集計で、月別の集計部分はウイザードで作成されるのは1日~末日ですが、これを、前月21日~今月20日のような「締め日」ライクに変更して集計することはできるものでしょうか。

《集計結果イメージ》
氏名,1月,2月,3月
山田,150,160,155
田中,150,160,165
佐藤,130,160,165

#1月は12月21日~1月20日分を集計するように下記を修正したい。
TRANSFORM Sum([売上]) AS 値
SELECT [氏名], Sum([売上]) AS [集計値: 売上]
FROM 弁当注文
GROUP BY [氏名]
PIVOT Format([年月日],"oooo") IN ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");

A 回答 (3件)

Accessは使わないので自信薄ですが、


[年月日]-20日+1月、でまとめればいいので、
PIVOT Format(DateAdd("m",1,DateAdd("d",-20,[年月日])),"oooo") IN ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
とかにすればいいんじゃないでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
なんかいいみたいです。(^O^)
テストデータで試しているところですが、目的の表示をしてくれているようです。勉強になりました。

お礼日時:2002/04/14 07:06

基本的には #1の方と同じやり方になりますが、月をFORMAT関数で得るのではなく、オリジナルの関数(モジュール)にすれば楽だと思います。


[年月日]を与えると12月21日~1月20日を"1月"として返す関数です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
アクセス初心者のため、モジュールの活用のしかたもよくわからない状態のため、アドバイスを試すこともできませんでした。 (^^;
今後の勉強課題にさせていただきます。

お礼日時:2002/04/14 07:09

i-haradaです。



「年月日」という考え方を頭の中から捨ててしまうと可能と思います。

12の月「21」から「31」は次の月つまり1の月とします。
(1)日付を分解し年,月,日と数値にする。
(2)単純に「IIf」を利用して日付の部分をどの月か判定する
   IIf(日付<21,月,IIf(月=12,1,月+1))

なんてのはいかがでしょう。まっ素人の考える事ですからもっと良い方法が
有るように思いますが。
実際の年月日から直接判断するのは私には難しいのでこれぐらいしか思いつきません。

この回答への補足

回答ありがとうございました。
初心者なので下記まではやったものの、正しく目的の表示までには至っていませんが、お知恵があれば拝借を。 (^^;

#access97です。

TRANSFORM Sum(弁当注文.売上) AS 値
SELECT 弁当注文.氏名, Sum(弁当注文.売上) AS [集計値: 売上]
FROM 弁当注文
GROUP BY 弁当注文.氏名
PIVOT Format(IIf(Day([年月日])<21,Month([年月日]),IIf(Month([年月日])=12,1,Month([年月日])+1)),"oooo") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");

補足日時:2002/04/13 17:29
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
zzzzzzさんの補足で、目的のことを達成できました。
ご説明により、アクセスのことも少しまたわかりました。

お礼日時:2002/04/14 07:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す