“ORA-00937: not a single-group group function” when running my query

梦想与她 提交于 2019-12-08 05:01:08

问题


i am using oracle 10g. my query is :

select "Debtor"."DebtorName",
sum(case when regionTable."Text" like '%North%' 
then to_number(count("Registration"."pkRegistrationId")) else 0 end) "North",
 sum(case when regionTable."Text" like '%South%' 
then to_number(count("Registration"."pkRegistrationId")) else 0 end) "South"
from "Registration"
inner join "CustomerRequisition" on "CustomerRequisition"."pkCustomerRequisitionId"="Registration"."fkCustomerRequisitionId"
inner join "EnumerationValue" regionTable on regionTable."pkEnumerationValueId"="CustomerRequisition"."fkRegion"
inner join "Debtor" on "Debtor"."pkDebtorId"="CustomerRequisition"."fkDebtorId"
group by "Debtor"."DebtorName",regionTable."Text","Registration"."pkRegistrationId"

i am getting this error.

ORA-00937: not a single-group group function

what am i missing here?


回答1:


This is your query:

select "Debtor"."DebtorName",
       sum(case when regionTable."Text" like '%North%' 
                then to_number(count("Registration"."pkRegistrationId")) else 0
           end) "North",
       sum(case when regionTable."Text" like '%South%' 
                then to_number(count("Registration"."pkRegistrationId")) else 0
           end) "South"
from "Registration" inner join
     "CustomerRequisition
     on "CustomerRequisition"."pkCustomerRequisitionId" = "Registration"."fkCustomerRequisitionId" inner join
     "EnumerationValue" regionTable    
     on regionTable."pkEnumerationValueId"="CustomerRequisition"."fkRegion" inner join
     "Debtor"
     on "Debtor"."pkDebtorId"="CustomerRequisition"."fkDebtorId"
group by "Debtor"."DebtorName", regionTable."Text", "Registration"."pkRegistrationId";

You have nested aggregation functions. Although Oracle does allow this, I doubt you really intend that feature. My guess is that you really want something like:

select "Debtor"."DebtorName",
       sum(case when regionTable."Text" like '%North%' 
                then 1 else 0
           end) "North",
       sum(case when regionTable."Text" like '%South%' 
                then 1 else 0
           end) "South"
from "Registration" inner join
     "CustomerRequisition"
     on "CustomerRequisition"."pkCustomerRequisitionId" = "Registration"."fkCustomerRequisitionId" inner join
     "EnumerationValue" regionTable    
     on regionTable."pkEnumerationValueId" = "CustomerRequisition"."fkRegion" inner join
     "Debtor"
     on "Debtor"."pkDebtorId" = "CustomerRequisition"."fkDebtorId"
group by "Debtor"."DebtorName";

It is possible that you want count(distinct) instead:

select "Debtor"."DebtorName",
       count(distinct case when regionTable."Text" like '%North%' 
                      then "Registration"."pkRegistrationId"
           end) "North",
       count(distinct case when regionTable."Text" like '%South%' 
                      then "Registration"."pkRegistrationId"
           end) "South"


来源:https://stackoverflow.com/questions/25566587/ora-00937-not-a-single-group-group-function-when-running-my-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!