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

StackOverflow https://stackoverflow.com/questions/8974700

Вопрос

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

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

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, Haves, while, Union, вложенные выборки, но, как я уже сказал, я, вероятно, слишком усложняю что-то, что относительно легко.

Это было полезно?

Решение

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
.

Другие советы

Другой вариант, который следует рассмотреть, — использовать сводный запрос с 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top