大家好 
我做一个查询 语句如下
select   to_char(T.日期,'yyyy-mm') 年月
         ,count(*) 总量
         ,(select count(*) from 已完成 T1 where to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm')) 完成量
    from 装卸明细 T
    group by to_char(T.日期,'yyyy-mm')这是一个很简单的查询,可是执行就提示“ORA-00979: not a group by expression”唉 语义很明确,很简单的
请各位高手指点一下吧

解决方案 »

  1.   

    select   to_char(T.日期,'yyyy-mm') 年月 
             ,count(*) 总量 
             ,(select count(*) from 已完成 T1 where to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm')) 完成量 
        from 装卸明细 T 
        group by to_char(T.日期,'yyyy-mm') 
      

  2.   

    select   to_char(T.日期,'yyyy-mm') 年月 
             ,count(t.*) 总量 
             ,count(t1.*)
             from 装卸明细 T , 已完成 T1 
          where to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm')) 完成量 
        group by to_char(T.日期,'yyyy-mm') 
      

  3.   

      select to_char(T.日期,'yyyy-mm') 年月 
              ,count(T) 总量,
             ,count(T1) 完成量 
        from 装卸明细 T ,
             已完成 T1
       where to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm')       
       group by to_char(T.日期,'yyyy-mm')
      

  4.   

    吧其中的*号换成字段名
    至于你写的为啥不行 , 因为oracle中没有你那中语法  
      

  5.   

    晕倒..知道* 的意思吗? 其实COUNT(T1)与COUNT(*)是一样的意思.
    COUNT(T1) 统计该列总量,
    COUNT(*)  统计所有字段的总量. 在T1不为空的情况下,两个值应该是一样的.
    COUNT(*)中还包含其他的字段, 所以也要GROUP BY 
    不知道 你明白了吗?
      

  6.   

    SELECT TO_CHAR(T.日期, 'yyyy-mm') 年月,
           COUNT(T.*) 总量,
           COUNT(t1.*) 完成量
      FROM 装卸明细 T,已完成 T1
      WHERE TO_CHAR(T1.完成时间, 'yyyy-mm') = TO_CHAR(T.日期, 'yyyy-mm')
     GROUP BY TO_CHAR(T.日期, 'yyyy-mm')
      

  7.   


    另外在问下count(表明别名)可以算出记录条数么我这里为什么不可以
      

  8.   

    楼上几位 
    首先感谢大家的热心帮助
    但是你们提供的办法是不可以的 
    我根据你们的建议改成如下语句
    select   to_char(T.日期,'yyyy-mm') 年月
             ,count(T.ID) 总量
             ,count(T1.ID)   完成量
        from 装卸明细 T,已完成  T1
        where to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm')
        group by to_char(T.日期,'yyyy-mm')得出的结果如下
    年月    总量  完成量
    2008-03 7090  7090
    2008-04 1866  1866
    可是我在已完成里只有2条数据,3、4月各一条
    所以你们的方法都不对
    再次感谢大家的帮忙
    ——为了赶进度,我建了两个视图 然后将2个视图关联起来 得到了我要的结果
    但是这个问题我还会继续研究
    希望大家多多帮忙 
    对了 我是在ora10g上执行的
      

  9.   

    select   to_char(T.日期,'yyyy-mm') 年月  ,count(*) 总量 
    from 装卸明细 T  left outer join (select 完成时间,count(*) from 已完成  group by 完成时间) T1 on to_char(T1.完成时间,'yyyy-mm')=to_char(T.日期,'yyyy-mm'))  group by to_char(T.日期,'yyyy-mm') 
    这样再试试
      

  10.   

    group by  年月,完成量 
      

  11.   

    带有 group by 子句的查询中的 select 字段列表中,除了包含在 group by 中的字段,其他字段都要求作为 group function (比如 AVG, COUNT, MAX, MIN, SUM )的参数出现,你的子查询违作为主查询的一个字段违反了这个规则了。考虑换一种写法吧