Альтернатива инструкции Switch для группировки результатов - MS Access - PullRequest
1 голос
/ 23 января 2012

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

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

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

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

Ответы [ 2 ]

1 голос
/ 23 января 2012

Вы можете группировать, используя datepart .

Например,

GROUP BY datepart("ww", Date_Returned)

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

0 голосов
/ 24 января 2012

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

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

, это будет увеличиваться, и вам не придется беспокоиться об изменении года.

...