2014-08-29 30 views
1

我使用的是oracle 10g。我的查詢是:「ORA-00937:不是單組功能」運行我的查詢時

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" 

我收到此錯誤。

ORA-00937: not a single-group group function 

我在這裏失蹤了什麼?

+0

http://stackoverflow.com/search?q=ORA-00937%3A+不是+ a +單組+組+功能 – 2014-08-29 10:38:56

+0

我沒有downvote,但你顯然沒有嘗試找到解決方案,所以這並不令人驚訝,這得到了downvoted。 (請參閱我發佈的鏈接有幾百個關於此錯誤的問題) – 2014-08-29 10:47:26

+0

解決方案是將相同的列名放在「select」中的group by子句中。我這樣做,但得到相同的錯誤。和谷歌搜索一再告訴我同樣的事情。所以我在這裏提出了一個問題。 – 2014-08-29 10:50:10

回答

2

這是您的查詢:

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"; 

你嵌套聚合函數。雖然Oracle確實允許這樣做,但我懷疑你是否真的想要這個功能。我的猜測是,你真的想要的東西,如:

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"; 

count(distinct)相反,它是可能的:

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" 
+0

謝謝..現在工作很好 – 2014-08-29 11:18:22

相關問題