Подсчет типа электронной почты по идентификатору клиента

У меня есть форма, которую люди могут использовать для отправки электронных писем нашим клиентам. Пользователь может выбрать одно из двух стандартных сообщений (Сообщение «1» или Сообщение «2»). За кулисами каждый раз, когда они нажимают кнопку «ОТПРАВИТЬ», происходит запись в таблицу «ЗАПИСИ» (при условии, что это проходит через обработчики ошибок).

Представим, что таблица RECORDS имеет 2 столбца:

CUST_ID  EMAIL_NUM
0000         1
0000         2
0000         1
0000         1
0001         2
0002         1
0002         1
0003         2
0003         2
0003         2

Мне нужен запрос, который считает единицы и двойки для каждого CUST_ID. Итак, набор результатов должен выглядеть примерно так:

CUST_ID  EMAIL_1_COUNT  EMAIL_2_COUNT
0000          3              1
0001          0              1
0002          2              0
0003          0              3

Я использовал count, group by, havings, while, union, nested selects, но, как я уже сказал, я, вероятно, слишком усложняю то, что относительно легко.


person Richard S    schedule 23.01.2012    source источник
comment
Если вы разместите эти попытки, вам будет легче указать, в чем вы ошиблись. :)   -  person GolezTrol    schedule 23.01.2012


Ответы (2)


Другой вариант, который следует рассмотреть, - использовать сводный запрос с TRANSFORM.

TRANSFORM NZ(Count(RECORDS.Email_NUm),0) AS CountOfEmail_NUm
SELECT RECORDS.CUST_ID
FROM RECORDS
GROUP BY RECORDS.CUST_ID
PIVOT RECORDS.Email_NUm;

Однако это приведет к появлению заголовков столбцов CUST_ID, 1 и 2. Однако, если у вас есть другая таблица с типами электронной почты, это может быть полезно (особенно если у вас больше типов электронной почты, чем 2).

SQL может выглядеть так

TRANSFORM NZ(Count(r.Email_NUm),0) AS CountOfEmail_NUm
SELECT r.CUST_ID
FROM RECORDS r
     INNER JOIN EMAIL_TYPES et
     ON r.Email_NUm = et.Email_NUm
GROUP BY r.CUST_ID
PIVOT et.TYPE_NAME;

Создание этого вывода

   CUST_ID | Work | Home 
   -------   ----   ----
   0000    | 3    | 1
   0001    | 0    | 1
   0002    | 2    | 0
   0003    | 0    | 3
person Conrad Frix    schedule 23.01.2012
comment
Интересный ответ. По мере того, как форма увеличивается и я добавляю новые стандартные сообщения, мне, возможно, придется использовать этот ответ. На данный момент первый ответ работает нормально и должен работать нормально некоторое время, пока не возникнут проблемы с производительностью. - person Richard S; 23.01.2012

person    schedule
comment
Вы палочка-выручалочка. Спасибо вам любезно - person Richard S; 23.01.2012