如何解决在 case 语句中使用计数函数
我有下面的代码,我需要在 case 语句的一个条件下输入一个计数函数,然后按下面的 case 语句分组。但它不允许我对案例陈述进行分组。我基本上想创建一个名为“Both”的第三个桶,条件如下
select
CASE
WHEN i.CLASSIFICATION in ('CUSTOMER','PARTNER') THEN 'API'
WHEN i.CLASSIFICATION in ('MOBILE','NDSE') THEN 'APP'
WHEN (i.CLASSIFICATION in ('MOBILE','NDSE','CUSTOMER','PARTNER') OR count(distinct UPPER(p.ACCOUNTID)) >=2) THEN 'BOTH'
ELSE 'Other' END AS "Bucket",count(distinct ACCOUNTID) as No_Accounts,count(distinct envelopeid_hash) as numenvelopes
from ENVELOPE_TABLE e
JOIN DIMDATE_TABLE b on to_date(e.sentinitial)=b.standarddate
join PAYING_TABLE p
on UPPER(e.ACCOUNTID)=UPPER(p.ACCOUNTID)
LEFT JOIN IK_TABLE i ON i.IntegratorKeyId = e.InitiatingIntegratorKeyId AND i.SourceKey = e.SourceKey
group by 1
解决方法
你有第一列的表达式,'select' 在 group by
之后执行,所以你得到一个错误。您需要在 case when
中再次重复 group by
:
select
CASE
WHEN i.CLASSIFICATION in ('CUSTOMER','PARTNER') THEN 'API'
WHEN i.CLASSIFICATION in ('MOBILE','NDSE') THEN 'APP'
WHEN (i.CLASSIFICATION in ('MOBILE','NDSE','CUSTOMER','PARTNER') OR count(distinct UPPER(p.ACCOUNTID)) >=2) THEN 'BOTH'
ELSE 'Other' END AS "Bucket",count(distinct ACCOUNTID) as No_Accounts,count(distinct envelopeid_hash) as numenvelopes
from ENVELOPE_TABLE e
JOIN DIMDATE_TABLE b on to_date(e.sentinitial)=b.standarddate
join PAYING_TABLE p
on UPPER(e.ACCOUNTID)=UPPER(p.ACCOUNTID)
LEFT JOIN IK_TABLE i ON i.IntegratorKeyId = e.InitiatingIntegratorKeyId AND i.SourceKey = e.SourceKey
group by CASE
WHEN i.CLASSIFICATION in ('CUSTOMER','PARTNER') OR count(distinct UPPER(p.ACCOUNTID)) >=2) THEN 'BOTH'
ELSE 'Other' END AS "Bucket"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。