如何从oracle中的表中获取列值和列数

时间:2013-09-06 06:23:53

标签: oracle11g

我希望oracle中的表中的列值和相同的列数。

以下是查询:

select username,
       count(username) 
  from ind_emp_leaves 
 where  status != 'Approved' 
   and  (leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
                           AND to_date('11-09-2013','dd/MM/yyyy')) OR
        (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
                          AND to_date('11-09-2013','dd/MM/yyyy')) 

以上查询显示错误:

  

SQL错误:ORA-00937:不是单组组功能

没有用户名字段,它显示计数值,但我也想要用户名值和用户名数。

3 个答案:

答案 0 :(得分:1)

假设您想要每个用户的计数,这应该给出正确的结果:

select username, count(*) from ind_emp_leaves 
where  (status != 'Approved') 
  and  ((leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')) 
  OR (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')))
group by username

请注意,我在留日部分周围添加了额外的parens - 我假设您希望检查两个时间间隔的“status!='Approved'”部分,而不仅仅是第一个时间间隔。

答案 1 :(得分:0)

您可以使用以下代码获得所需的结果。

  select username, count(*) from ind_emp_leaves 
     where  status != 'Approved')
     and  ((leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')) 
     OR (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')))
     group by username

答案 2 :(得分:0)

嘿,如果你正在使用聚合函数,比如!

AVG
COLLECT
CORR
CORR_*
COUNT
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
LAST

你应该按功能分组!。