【问题标题】:ora-00979 not a GROUP BY expression help spoolora-00979 不是 GROUP BY 表达式帮助假脱机
【发布时间】:2014-01-30 14:53:43
【问题描述】:
SET colsep '|'
SET echo OFF
SET feedback OFF
SET linesize 1000
SET pagesize 0
SET sqlprompt ''
SET trimspool ON
SET headsep OFF

spool monitor.csv

SELECT error_id, '|', error_desc, '|', b.control_by
  FROM error a, component_info b
 WHERE a.error_id IN (
         SELECT error_id FROM component_thresh JOIN component_info USING (component_id))
 GROUP BY b.control_by
 ORDER BY a.error_desc
/

我需要按不同表中的列分组,然后按 error_desc 排序,然后输出结果。

编辑:啊!我需要两个都订购。

【问题讨论】:

  • 当您在 Oracle(以及大多数其他 SQL 实现)中的 SELECT 子句中使用 GROUP BY 时,您只能拥有用于分组和/或聚合值的字段(例如 @987654324 @、MINSUM 等)
  • 为什么要分组?
  • @user2992757 。 . .可能客户想要order by,所以control_by相同的行会一起出现。
  • "按 control_by 分组,分组内按 abc 顺序排列。"

标签: sql oracle group-by ora-00979


【解决方案1】:

您似乎想将具有相同control_by 的所有行排列在一起,以便能够浏览它们。 GROUP BY 试图做的是将所有内容放在一行中,但这似乎不是您想要的。

您可以使用 ORDER BY 子句代替 GROUP BY。这会将具有相同control_by 的所有行放在一起出现。也可以GROUP BY b.control_by, a.error_id;并得到相同的结果。最好的选择是使用ORDER BY control_by, error_desc

select error_id, '|', error_desc, '|', b.control_by from 
  error a, component_info b where 
  a.error_id in (
    select error_id
    from component_thresh
    join component_info using(component_id)
    )
 order by b.control_by, a.error_desc;
/

这应该为您的客户解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2013-03-29
    • 2013-06-25
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多