2012-01-23 3 views
1

私は私たちが顧客に送る手紙を記録したテーブルを持っています。また、この表の手紙のステータスを把握しています。具体的には、手紙を受け取った人のうち何人が再び連絡を受けることに同意したかを知りたいと考えています。結果をグループ化するためのスイッチステートメントの代わりに - MS Access

この部分は簡単ですが、結果をあらかじめ指定した週(週1、週2など)にグループ化するように求められました。私はこの目的のためにswitch文を使用していますが、今は20週目になっているので、MS Accessはクエリが複雑すぎると言っています。

ここに私のコードがあります。簡潔にするためswitch文を簡略化しています。私たちは実際に実際のswitch文に1〜20週を要します。これがAccessにクエリを処理させない原因です。

SELECT Count([Letter Status].Patient_ID) AS CountOfPatient_ID, Switch([Date_Returned] Between #10/25/2011# And #10/31/2011#,"Week 1") AS Week 
FROM [Letter Status] 
WHERE ((([Letter Status].Letter_Status)="Agreed to be contacted")) 
GROUP BY Switch([Date_Returned] Between #10/25/2011# And #10/31/2011#,"Week 1"); 

switchステートメントが機能しないので、結果を週ごとに処理するためのより論理的な方法があるかどうかは疑問でした。私たちの一時的な解決策は、私は一度に1週間処理し、その結果を別のテーブルに追加することです。しかし、私はこれがdbの正規化に反すると確信しています。もしそれが良い方法があれば、私は学びたいと思います。

助けてください。

答えて

1

代わりにdatepartを使用してグループ化できます。

例えば、

GROUP BY datepart("ww", Date_Returned) 

アクセスによって返された週番号は、ちょうど、必要に応じてオフセット数を加算または減算、必要な番号と一致しない場合。

+0

すばらしいアイデア、ありがとう。私の週1は実際にカレンダー週40と相関関係にあるので、私は39を引いています。これは、最近の週(2012年に始まって以来)が-38、-37、-36 )。相関値(つまり-38 = 1週目)を使用してルックアップテーブルを作成するのが最善か、IIfステートメントでこれらを評価する方が良いでしょうか?私はルックアップテーブルに向かっている。 – jerry

+0

@Jerryあなたのナンバリングシステムにアクセス予定の1週間目のアクセスは何ですか? – RedFilter

+0

つまり、毎週の週番号をリセットするのか、それとも単に蓄積し続けるだけですか? – RedFilter

0

あなたがベースとして、あなたの最初の週を使用してDATEDIFFを使用した場合、

WeekNo = datediff("ww","1/7/2011",Date_Returned) 

このようなものは、インクリメント続けると、あなたは文句を言わない年の変化を心配する必要があります。

関連する問題