直接说应该怎么做,至于为什么我不知道,
原因是:
因为把select 列表项的中列忘了写在group by中。于是就出现了以上的错误ORA-00979 不是GROUP BY 表达式。
所以我们要把在select 列表项的字段写在group by中
这里参考一下别人SQL代码样例:
select deptno,job,avg(sal) from emp
group by deptno;
ERROR 位于第 1 行:
ORA-00979: 不是 GROUP BY 表达式
这里就是因为在select 列表像中出现了像deptno和job,而在group by中并没有出现的缘故。
以上的错误纠正为:
Select deptno,job,avg(sal) from emp
Group by deptno,job;
这是正常情况下的问题,
我的问题是我在case … when 时使用group by 出现问题
代码与截图重点如下:
select sy.period,sy.prod_code ,
case when pr.STARTTIME !=null then pr.STARTTIME else pr.EFFDATE end as starttime ,
sum(sy.complaint_fee + sy.faul_fee) faulfee
from ai_balance_detail_sync_202012 sy --修改日期
left join ai_product pr on pr.PRODUCT_CODE = sy.prod_code
where
-- 筛选detail表中数据只有等级为B的数据
exists ( select PRODUCT_CODE from (select pr.PRODUCT_CODE
from AI_LEVEL_CERTIFICAT_SYNC sync left join ai_product pr on sync.PRODUCT_ID =pr.id where sync.CERTIFICATION_LEVEL = 'B' ) cc where cc.PRODUCT_CODE = sy.prod_code )
and is_group_srv = '1' and BILL_CYCLE_ID='202012' and prod_code is not null --修改日期
group by period,prod_code,starttime
我以为我这样的写法完全符合在select 列表项的字段写在group by中,
其实是不对的,我需要把 pr.STARTTIME 和 pr.EFFDATE 等两个字段都写在gruop by中
正确答案如下:
如此解决了我在case … when 情况下 的group by 问题