【问题标题】:ORA-00979: not a GROUP BY expression issue [duplicate]ORA-00979: 不是 GROUP BY 表达式问题 [重复]
【发布时间】:2011-06-29 00:44:49
【问题描述】:

我正在执行以下请求,但收到“ORA-00979: not a GROUP BY expression”错误。

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

我知道除了分组函数(如 MAX 或 SUM)之外,我必须将 SELECT 的所有列都放在 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, field3, field5, field6, field8, field9, field10, field11, field12, field13
order by field1, field2

如何在不改变查询的整体含义的情况下解决这个问题?

非常感谢, 马丁

【问题讨论】:

    标签: sql oracle oracle11g ora-00979


    【解决方案1】:

    您的group by 表达式中缺少field7

    您也不能通过相同查询的表达式在您的组中使用别名。您需要通过表达式在您的组中添加完整的CASE 语句以包含字段7。

    在 group by 中仅提及别名是不可能的,因为 SELECT 步骤是执行查询的最后一步,当尚未定义别名时,分组发生得更早。

    【讨论】:

    • 如果我添加它,我会收到以下错误:ORA-00904: "field7": invalid identifier
    • @MartinMoizard - 我认为您可能无法在同一查询的 group by 中添加别名。您需要在 group by 中添加完整的 CASE 语句。
    • @Sachin Shanbhag - 是的,它正在工作,你知道为什么我不需要在我的 GROUP BY 语句中编写 CASE 语句的 'as field7' 部分吗?
    • @MartinMoizard - 解释了为什么您不能在任何更新的答案中使用 group by 中的别名。
    • @Sachin Shanbhag - 我不确定你的意思。你能用另一种方式解释吗?
    【解决方案2】:

    你需要添加表达式

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

    到您的group by 表达式中。

    【讨论】:

    • 谢谢,成功了!你能解释一下为什么我需要把它放在 GROUP BY 表达式中吗?
    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 2011-04-24
    • 2017-06-20
    • 2011-06-04
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多