我跟随选择:
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
。
到目前为止,我发现我遇到了Case和别名的问题。 没有这个它有效。
有什么建议吗?
*我正在尝试用这个陈述来获得所有双重输入。使用内部查询我将所有旧代码更改为新代码,然后我想将它们分组以查看它们是否存在多次。 有些客户确实使用过旧代码,现在可能有两次相同的城镇。
修改
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 :(得分:3)
“当我在我们的服务器上执行此查询时,它工作正常。但是在 我客户的服务器我得到了oracle错误
ORA-00979: not a GROUP BY expression.
“
这意味着以下两件事之一:
后者似乎很有可能,因为您在此处发布的代码显然不是您在自己的服务器上运行的代码。正如其他人所指出的那样,它包含了几个语法错误,但事实上它们都不会抛出ORA-00979。
该错误意味着您在投影中有一个不在GROUP BY子句中的非聚合列,或者您在GROUP BY子句中有一些不在投影中的内容。
答案 1 :(得分:1)
您在表格名称后面缺少括号,在attribut15之后缺少逗号。试试这个:
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;
答案 2 :(得分: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
答案 3 :(得分:0)
我的解决方案是使用View。
内部选择视图,然后外部选择正常,它工作正常。
我发现他不喜欢外部选择中的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