日期:2014-05-17  浏览次数:20875 次

各位高手,为什么查不出数据啊
假设obe表有这么三个字段,obe01,obe02,obe03

SELECT DISTINCT oeb01,sum(oeb02) FROM oeb
  GROUP BY oeb03
  HAVING count(oeb01) > 1
  ORDER BY oeb01

无法查出数据,而下面就可以
SELECT DISTINCT oeb01,sum(oeb02) FROM oeb
  GROUP BY oeb01
  HAVING count(oeb01) > 1
  ORDER BY oeb01
难道group by的字段,一定是select关键字后面的字段吗,不是就无法查询?




------解决方案--------------------
要查询的列,如果用到分组语句,就必须在GROUP BY中。。。
------解决方案--------------------
是的。
如题中所述,第一个sql,oeb03字段都不是结果集中的字段,在分组之后,这个字段就没有了。
------解决方案--------------------
下面是GROUP BY的一些总结:

GROUP BY后面可以出现多列。
对行分组可以使用任何聚合函数。
GROUP BY子句中出现的列,并不要求一定出现在SELECT子句中。
如果查询中包含一个聚合函数,而所选择的列并不在聚合函数中,则这些列就必须在group by 子句中。
就是说如果在一个查询中使用了聚合函数,则所选择的列一定是聚合函数中的列或者是出现在group by子句中的列,其它的列不允许被查询。

你查询不出来结果是因为obe1前有distinct的原因。仔细想想一边按obe3分组,一边又要求obe1 distinct,Oracle不知如何做。
------解决方案--------------------
oeb03不在select的结果集中,无法进行group by