2012-01-12 102 views
0

我已经选择以下设置:不是一个GROUP BY表达式

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 

当我执行我们的服务器上此查询它做工精细。但在我的客户的服务器上,我得到了oracle错误ORA-00979: not a GROUP BY expression

据我发现,即时通讯与案件的问题和别名。 无法使用它。

有什么建议吗?

*我试图做的这个陈述是得到所有的双项。与内部查询我将所有旧代码更改为新的,然后我想分组他们看看他们是否存在乘法时间。 有些客户确实使用旧代码,现在可能他们有同一个小镇2次。

编辑

SELECT * FROM product_component_version

,我得到两个:

Product          Version   Status 

NLSRTL          10.2.0.4.0  Production 
Oracle Database 10g Enterprise Edition  10.2.0.4.0  64bi 
PL/SQL          10.2.0.4.0  Production 
TNS for 64-bit Windows:      10.2.0.4.0  Production 

EDIT2

我的测试表明我说,他不喜欢用别名调用。 是否有一个设置,该别名不被识别?

回答

0

我的解决方案是使用视图。

内部选择作为视图,然后外部选择正常,它工作正常。

我发现他不喜欢town_CODE在外面的选择。

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from v_towntable 
GROUP BY attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE 
having count(*) > 1 
1

您在表名后加上逗号amit15后缺少括号。试试这个:

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 
+0

以及它只是一个错字实际的查询是有点大(更多本attribut变化) – domiSchenk 2012-01-12 13:13:38

+0

如果从上述两个服务器上运行只是我的代码,你得到任何错误? – 2012-01-12 14:50:01

+0

仍然是一样的错误:-(我发现当我删除town_code在第一选择它的作品,但后来我不知道哪个城镇它 – domiSchenk 2012-01-12 14:58:13

0

有似乎是在原来的查询一个或两个语法错误 - 下面应该工作:

Select attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE, 
     count(*)  
from (select attribut1, 
      dateattribut, 
      attribut3, 
      attribut4, 
      attribut15, 
      CASE WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
        CASE town_CODE 
         WHEN '039' THEN '078' 
         WHEN '050' THEN '093' 
         WHEN '091' THEN '008' 
         WHEN '102' THEN '093' 
         ELSE town_CODE 
        end 
        ELSE town_CODE 
      end as town_CODE 
     from towntable) v 
GROUP BY attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE 
having count(*) > 1 
+0

synatx错误是一个错误,当我缩短脚本 – domiSchenk 2012-01-12 13:29:05

+0

@rageit (错误地)改变问题的外壳是* not *有效的编辑 – PeeHaa 2014-05-19 18:53:56

3

“当我执行我们的服务器上此查询它做工精细。但我的客户的 服务器上,我得到Oracle错误ORA-00979: not a GROUP BY expression.

这意味着两件事情之一:

  1. 您的服务器与客户的服务器不同,并且该差别可防止出现错误;例如,您的服务器是更高版本或具有不同的修补程序级别。
  2. 实际上,您并不是在自己的客户数据库上运行相同的代码。

后者似乎很可能,当你发布这里明显的代码是不是你自己的服务器上运行的代码。正如其他人指出的那样,它包含了一些语法错误,尽管事实上它们都不会抛出ORA-00979。

该错误表示您在投影中有一个非聚合列,它不在GROUP BY子句中,或者您可能在GROUP BY子句中有某些不在投影中的东西。

+0

well Nr.2是不是coze代码是相同的,或者复制和粘贴改变了代码对于DB版本选择'SELECT * FROM product_component_version;'显示相同的结果(见我的文章) – domiSchenk 2012-01-12 13:35:45