ORA-00937:不是用于求和函数的单组分组函数

时间:2019-05-17 21:23:10

标签: sql oracle

我正在尝试通过IHID.CS_ID汇总COUNT(IHID.RSID_PROD_N),但是遇到了问题。如何解决?

SELECT 
  IHID.CS_ID ,IHID.RSID_PROD_N,COUNT(IHID.RSID_PROD_N),
  RSPF.RSPF_PROD_N,COUNT(RSPF.RSPF_PROD_N),sum(COUNT(IHID.RSID_PROD_N))
from IHIH 
JOIN IHID
  ON ihih.rsih_invoice_n = ihid.rsih_invoice_n AND ihih.cs_id = ihid.cs_id 
JOIN RSPF 
  ON ihih.cs_id = rspf.cs_id AND ihid.rsid_prod_n=rspf.rspf_prod_n
WHERE rspf_desc LIKE '%SCISSOR LIFT'
GROUP BY IHID.CS_ID, IHID.RSID_PROD_N,RSPF.RSPF_PROD_N,IHID.CS_ID;

桌子是这样的

16     SJIII4626    1      SJIII4626    1
16     SJIII4632    1      SJIII4632    1

我想要16的1 + 1 = 2

3 个答案:

答案 0 :(得分:0)

由于IHID.RSID_PROD_N和RSPF.RSPF_PROD_N中的唯一值,因此未按照您的意愿进行分组。删除这些列,它将按预期分组。

答案 1 :(得分:0)

一种选择是将您当前的查询(几乎不变)用作CTE,然后将SUM应用于您无法嵌套的COUNT。像这样:

with your_current_query as
  -- removed nested SUM(COUNT)
  (select 
     ihid.cs_id,
     ihid.rsid_prod_n,
     rspf.rspf_prod_n,
     count(ihid.rsid_prod_n) cnt_rsid
     count(rspf.rspf_prod_n) cnt_rspf
   from ihih join ihid on ihih.rsih_invoice_n = ihid.rsih_invoice_n 
              and ihih.cs_id = ihid.cs_id 
             join rspf on ihih.cs_id = rspf.cs_id 
              and ihid.rsid_prod_n=rspf.rspf_prod_n
   where rspf_desc like '%SCISSOR LIFT'
   group by ihid.cs_id, 
            ihid.rsid_prod_n,
            rspf.rspf_prod_n
  )
select cs_id,
       rsid_prod_n,
       rspf_prod_n,
       cnt_rsid,
       cnt_rspf,
       sum(cnt_rsid) sum_cnt_rsid   --> this represents nested SUM(COUNT)
from your_current_query
group by cs_id,
         rsid_prod_n,
         rspf_prod_n,
         cnt_rsid,
         cnt_rspf;

答案 2 :(得分:0)

我认为您需要分析功能而不是这里的汇总。像这样:

SELECT 
  IHID.CS_ID 
  ,IHID.RSID_PROD_N
  ,row_number() over (partition by IHID.CS_ID order by IHID.RSID_PROD_N) as IHID_RSID_PROD_N
  ,RSPF.RSPF_PROD_N
  ,row_number() over (partition by IHID.CS_ID order by RSPF.RSPF_PROD_N) as RSPF_RSPF_PROD_N
  ,COUNT(IHID.RSID_PROD_N) over (partition by IHID.CS_ID) as sum_count
from IHIH 
JOIN IHID
  ON ihih.rsih_invoice_n = ihid.rsih_invoice_n AND ihih.cs_id = ihid.cs_id 
JOIN RSPF 
  ON ihih.cs_id = rspf.cs_id AND ihid.rsid_prod_n=rspf.rspf_prod_n
WHERE rspf_desc LIKE '%SCISSOR LIFT'
;

不确定,因为您的问题缺少完整的测试用例。

如果此答案不是您想要的,请编辑您的问题,以提供表结构和样本输入数据以及从该数据派生的必需输出。