Подсчет типа электронной почты по идентификатору клиента - PullRequest
2 голосов
/ 23 января 2012

У меня есть форма, которую люди могут использовать для отправки электронных писем нашим клиентам. У пользователя есть возможность выбора между двумя стандартными сообщениями (сообщение «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, hass, while, union, nested select, но, как я уже сказал, я, вероятно, слишком усложняю то, что относительно легко.

Ответы [ 2 ]

4 голосов
/ 23 января 2012
select
  CUST_ID,
  sum(iif(EMAIL_NUM = 1, 1, 0)) as EMAIL_1_COUNT,
  sum(iif(EMAIL_NUM = 2, 1, 0)) as EMAIL_2_COUNT
from
  RECORDS
group by
  CUST_ID
1 голос
/ 23 января 2012

Другой вариант, который следует рассмотреть, - это использовать сводный запрос с 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
...