我有一张桌子可以跟踪我们发送给客户的信件。我们也在跟踪此表中的信件状态,具体而言,我们想知道有多少人同意再次联系。
这部分很容易,但现在我被要求按预先指定的周数(即第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语句不起作用,我想知道是否有更合理的方式按周处理结果。我们的临时解决方案涉及我一次处理一周,并将结果添加到单独的表中。但是,我很确定这会违反数据库规范化,如果有更好的方法,我想学习。
请帮忙。
答案 0 :(得分:1)
您可以使用datepart进行分组。
如,
GROUP BY datepart("ww", Date_Returned)
如果Access返回的周数与您需要的数字不匹配,只需根据需要添加或减去偏移数。
答案 1 :(得分:0)
如果你使用dateiff作为基础,比如
WeekNo = datediff("ww","1/7/2011",Date_Returned)
这将继续增加,你不必担心一年的变化。