计算每个客户 ID 的电子邮件类型
题
我有一个人们可以用来向我们的客户发送电子邮件的表格。用户可以选择在两条预设消息(消息“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 select,但就像我说的,我可能把相对简单的事情复杂化了。
解决方案
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
不隶属于 StackOverflow