在我最近收到SO的帮助后,我设法在SELECT查询中使用以下代码获取数据:
COUNT(CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2 THEN 1 END) AS "2 day",
这产生了满足特定条件事件的实例计数。
但我现在想计算与这些事件相关的人数(唯一电子邮件地址)。
我试过了:
COUNT(CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2 THEN COUNT(DISTINCT TmpNIMSalesForceDB.EMAIL) END) AS "2 day"
逻辑似乎在我看来 - 如果案件的结果是2,那么计算该案件的不同电子邮件地址。
但似乎SQL(或Teradata)不喜欢以这种方式嵌套。生成的错误消息是“无法下一次聚合函数”。
我可以这样使用COUNT(DISTINCT
吗?
答案 0 :(得分:2)
您想要的表达式是条件count(distinct)
:
COUNT(DISTINCT CASE WHEN CAST(EVENT_TIMESTAMP AS DATE) - CONTRACT_EFFECTIVE_DATE = 2
THEN TmpNIMSalesForceDB.EMAIL
END) AS "2 day"
通过省略else
子句,当条件不满足时,值为NULL
。因此,EMAIL
的不同值正在计算条件。