2011-02-17 49 views
2

我正在執行以下請求,並得到「ORA-00979:不是GROUP BY表達式」錯誤。ORA-00979:不是GROUP BY表達式問題

select distinct 
field1, 
field2, 
field3, 
count(*) as field4, 
field5, 
field6, 
case 
when smt1>0 then 'Deleted' 
when smt2>0 then 'Impacted' 
when smt3>0 then 'Unknown' 
else 'Clean' 
end as field7, 
field8, 
field9, 
field10, 
field11, 
field12, 
field13 
from (<here a big sub query>) A 
group by field1, field2 
order by field1, field2 

我知道,我必須把選擇的所有列在GROUP BY語句中,除了分組功能的人(如MAX或SUM),所以我想下面的查詢,但我得到同樣的錯誤信息:

select distinct 
field1, 
field2, 
field3, 
count(*) as field4, 
field5, 
field6, 
case 
when smt1>0 then 'Deleted' 
when smt2>0 then 'Impacted' 
when smt3>0 then 'Unknown' 
else 'Clean' 
end as field7, 
field8, 
field9, 
field10, 
field11, 
field12, 
field13 
from (<here a big sub query>) A 
group by field1, field2, field3, field5, field6, field8, field9, field10, field11, field12, field13 
order by field1, field2 

如何在不改變查詢的整體含義的情況下解決這個問題?

非常感謝你, 馬丁

回答

5

你缺少你group by表達field7

此外,通過表達相同的查詢,您不能在組中使用別名。您需要在表達式中添加完整的CASE聲明以包含field7。

由於SELECT步驟是發生查詢執行的最後一個步驟,因此只需提及一個別名即可,而當別名尚未定義時,會發生分組。

+0

如果我添加它,我得到以下錯誤:ORA-00904:「field7」:無效的標識符 – MartinMoizard 2011-02-17 11:23:44

+0

@MartinMoizard - 我想你可能無法通過相同的查詢添加別名。您需要在group by中添加完整的CASE語句。 – 2011-02-17 11:25:40

3

你需要表達

case 
when smt1>0 then 'Deleted' 
when smt2>0 then 'Impacted' 
when smt3>0 then 'Unknown' 
else 'Clean' 
end 

添加到您的group by表達。