Ms access 按客户id统计电子邮件类型

Ms access 按客户id统计电子邮件类型,ms-access,count,group-by,union,having,Ms Access,Count,Group By,Union,Having,我有一个表格,人们可以用它向我们的客户发送电子邮件。用户可以选择两条固定消息(消息“1”或消息“2”)。在幕后,每次他们点击“发送”按钮,它就会登录到“记录”表中(只要它通过错误处理程序) 让我们假设RECORDS表有两列: CUST_ID EMAIL_NUM 0000 1 0000 2 0000 1 0000 1 0001 2 0002 1 0002 1 0003

我有一个表格,人们可以用它向我们的客户发送电子邮件。用户可以选择两条固定消息(消息“1”或消息“2”)。在幕后,每次他们点击“发送”按钮,它就会登录到“记录”表中(只要它通过错误处理程序)

让我们假设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
我需要一个查询,计算每个客户ID的1和2。因此结果集应该如下所示:

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

我使用了计数、组BYS、HAVENS,而Enion,嵌套的选择,但是就像我说的,我可能过于复杂了一些比较容易的事情。

< P>另一个考虑的选项是使用转换< /P>的PIVO查询。
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 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\u 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

发布这些尝试肯定会让你更容易指出哪里出了问题。:)你是救命恩人。谢谢你有意思的回复。随着表单的增长,我添加了更多的固定消息,我可能不得不使用此响应。目前,第一个响应可以正常工作,并且应该可以正常工作一段时间,直到出现性能问题。