2012-01-23 2 views
1

У меня есть таблица, которая отслеживает письма, которые мы отправляем нашим клиентам. Мы также отслеживаем статус письма в этой таблице, и, в частности, мы хотим знать, сколько людей, получивших письмо, согласились связаться с ним снова.Альтернатива оператору Switch для группировки результатов - MS Access

Эта часть проста, но теперь меня попросили сгруппировать результаты по заранее заданным неделям (например, неделя 1, неделя 2 и т. Д.). Я использую оператор switch для этой цели, но теперь, когда мы находимся в 20-й или около того неделе, MS Access заявляет, что запрос слишком сложный.

Вот мой код - с упрощенным упрощением для краткости. На самом деле у нас действительно есть недели 1-20 в действительном операторе switch, и именно это заставляет 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 не работает, мне было интересно, был ли более логичный способ обработки результатов по неделям. Наше временное решение включает в себя обработку одной недели за один раз и добавление результатов в отдельную таблицу. Тем не менее, я уверен, что это противоречит нормализации db, и если есть лучший способ сделать это, я хотел бы узнать.

Пожалуйста, помогите.

ответ

1

Вместо этого вы можете использовать datepart.

Е.Г.,

GROUP BY datepart("ww", Date_Returned) 

Если номер недели, возвращаемые Access не соответствуют номерам, нужно просто добавить или вычесть смещение число по мере необходимости.

+0

Отличная идея, спасибо. Поскольку моя неделя 1 действительно коррелирует с календарной неделей 40 - я вычитаю 39. Это в значительной степени решает все, за исключением наших последних недель (с тех пор, как мы начинаем в 2012 году) появляются как -38, -37 и -36). Было бы лучше всего создать таблицу поиска с корреляционными значениями (т. Е. -38 = неделя 1), или было бы лучше оценить их с помощью инструкции IIf? Я склоняюсь к смотровому столу. – jerry

+0

@Jerry Какой номер Доступ к неделе 1 должен иметь в вашей системе нумерации? – RedFilter

+0

I.e., повторяют ли число недель каждый год, или они просто продолжают накапливаться? – RedFilter

0

если вы использовали DateDiff используя свою первую неделю в качестве базы, что-то вроде

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

это будет держать приращение и вам не нужно беспокоиться о смене года.

Смежные вопросы