Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle:非按表达式分组错误_Oracle - Fatal编程技术网

Oracle:非按表达式分组错误

Oracle:非按表达式分组错误,oracle,Oracle,运行此查询时,我得到一个group by表达式错误ORA-00979。我已经尝试通过从组中删除x.a,但仍然不起作用。有人能帮我吗。您需要在GROUP BY子句中使用此表达式,而不是x.a: select case when x.a in (select y.c from join2) then x.a end, x.b, x.c, y.a, z.c from join1 x, join2 y, join3 z where x.a = z.a group by x.a, x.b, x.c,

运行此查询时,我得到一个group by表达式
错误ORA-00979
。我已经尝试通过从组中删除x.a,但仍然不起作用。有人能帮我吗。

您需要在
GROUP BY
子句中使用此表达式,而不是
x.a

select case when x.a in (select y.c from join2) then x.a end, x.b, x.c, y.a, z.c 
from join1 x, join2 y, join3 z where x.a = z.a 
group by x.a, x.b, x.c, y.a, z.c order by x.c;
因此,把所有这些放在一起:

case when x.a in (select y.c from join2) then x.a end

但是,我必须指出,您正在进行
x
y
之间的笛卡尔连接,而且还不完全清楚为什么要使用
groupby
,因为没有聚合。

thanx david,但我还需要一个帮助。我喜欢使用与上述查询相同的方法,从join1 x、join2 y、join3 z中选择x.a、x.b、x.c、y.a、z.c,其中x.a=y.c和x.a=z.a按x.a、x.b、x.c、y.a、z.c排序;你能帮我一下吗?我看不出有什么问题;如果你需要帮助,我建议你问一个新问题。
SELECT CASE WHEN x.a IN ( SELECT y.c FROM join2) THEN x.a END
     , x.b, x.c, y.a, z.c
  FROM join1 x, join2 y, join3 z
 WHERE x.a = z.a
 GROUP BY CASE WHEN x.a IN ( SELECT y.c FROM join2) THEN x.a END
     , x.b, x.c, y.a, z.c
 ORDER BY x.c;