Reputation: 241
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?
Upvotes: 0
Views: 515
Reputation: 1269703
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"
Upvotes: 2