替换Switch语句以分组结果 - MS Access

时间:2012-01-23 17:46:16

标签: database ms-access ms-access-2010

我有一张桌子可以跟踪我们发送给客户的信件。我们也在跟踪此表中的信件状态,具体而言,我们想知道有多少人同意再次联系。

这部分很容易,但现在我被要求按预先指定的周数(即第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语句不起作用,我想知道是否有更合理的方式按周处理结果。我们的临时解决方案涉及我一次处理一周,并将结果添加到单独的表中。但是,我很确定这会违反数据库规范化,如果有更好的方法,我想学习。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您可以使用datepart进行分组。

如,

GROUP BY datepart("ww", Date_Returned)

如果Access返回的周数与您需要的数字不匹配,只需根据需要添加或减去偏移数。

答案 1 :(得分:0)

如果你使用dateiff作为基础,比如

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

这将继续增加,你不必担心一年的变化。