无法嵌套聚合操作 - Teradata Case When

时间:2014-05-07 21:15:28

标签: sql count case teradata

在我最近收到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吗?

1 个答案:

答案 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的不同值正在计算条件。