Oracle SQL:Alias Column和Sum with group by

时间:2018-03-27 03:26:03

标签: sql oracle group-by aggregate-functions

我有一个别名列m和一个sum函数。我知道我不能在顶部查询中按m分组,因为SELECT尚未执行。我发现如果删除'm'列,我可以执行此查询,但我需要此列出现在查询中。

所以我尝试将SELECT和FROM放在查询前面。

select jobno,m,total
from (
  select j.jobno,
         sum(r.amtfc) total,
         decode(j.consolno,null,j.shpno,j.consolno) m
from job j,
     jobother jo,
     revenue r,
     fmparty f
where j.voidby is  null 
 and  j.unid=jo.job_unid 
 and  j.unid=r.job_unid 
  and r.invdocno is null 
  and f.partyid=r.billing_partyid 
)
group by jobno, m

但这让我回来了

  

“ORA-00979:不是GROUP BY表达式”

有没有人有任何建议?我是一个非常新的SQL,可以使用帮助,所以感谢先进!

2 个答案:

答案 0 :(得分:0)

来自' ORA-00979'

  

您尝试执行包含GROUP BY函数的SELECT语句(即:MIN函数,MAX函数,SUM函数,COUNT函数)和SELECT列表中不在GROUP BY子句中的表达式。

我认为您的选择可能类似于

SELECT j.jobno jobno,
       decode(j.consolno,null,j.shpno,j.consolno) m,
       sum(r.amtfc) total
FROM job j,jobother jo,revenue r,fmparty f
WHERE j.voidby is  null and  j.unid=jo.job_unid and  
      j.unid=r.job_unid and r.invdocno is null and
      f.partyid=r.billing_partyid
GROUP BY j.jobno, decode(j.consolno,null,j.shpno,j.consolno)

答案 1 :(得分:0)

首先,学习使用正确的,明确的join语法!

您可以将查询简化为:

select j.jobno, sum(r.amtfc) as total,
       coalesce(j.consolno, j.consolno) as m
from job j join
     jobother jo
     on j.unid = jo.job_unid join
     revenue r
     on j.unid = r.job_unid join
     fmparty f
     on f.partyid = r.billing_partyid
where j.voidby is null and r.invdocno is null 
group by jobno, coalesce(j.consolno, j.consolno)