按功能列分组

时间:2014-12-02 07:34:41

标签: plsql oracle11g oracle-sqldeveloper

我正在写这样的查询...

select to_char(e_date, 'MON/YYYY') as Month , location_code, count(employee_number) from ...

现在我想按月和Location_code分组。那么如何在group by子句中使用to_char(e_date, 'MON/YYYY') as Month

修改

select to_char(vheda.e_date, 'MON/YYYY') as Months , hla.location_code, count(vheda.employee_number) emp_count from 
virtu.virt_hr_emp_daily_attendance vheda 
inner join per_all_people_f papf on vheda.party_id = papf.party_id
inner join per_all_assignments_f paaf on papf.person_id = paaf.person_id 
inner join hr_locations_all hla on paaf.location_id = hla.location_id 
where (trunc(sysdate) between PAPF.EFFECTIVE_START_DATE and PAPF.EFFECTIVE_END_DATE) 
--and (vheda.e_in_time is not null)
and vheda.e_duration <> 0
and (trunc(sysdate) between PAAF.EFFECTIVE_START_DATE and PAAF.EFFECTIVE_END_DATE) 
and vheda.e_date between '1-aug-2014' and '31-oct-2014'
group by hla.location_code, vheda.e_date
order by vheda.e_date

在按使用条款{OUT}使用时{0}}

ORA-00979:不是GROUP BY表达式 00979. 00000 - &#34;不是GROUP BY表达式&#34; *原因:
*行动: 行错误:58列:37

3 个答案:

答案 0 :(得分:1)

select to_char(e_date, 'MON/YYYY') as Month , location_code, count(employee_number) 
from ...
group by to_char(e_date, 'MON/YYYY'), location_code

答案 1 :(得分:1)

您需要group by To_char(vheda.e_date,&#39; MON / YYYY&#39;)和hla.location_code。

SELECT To_char(vheda.e_date, 'MON/YYYY') AS Months, 
       hla.location_code, 
       Count(vheda.employee_number)      emp_count 
FROM   virtu.virt_hr_emp_daily_attendance vheda 
       inner join per_all_people_f papf 
               ON vheda.party_id = papf.party_id 
       inner join per_all_assignments_f paaf 
               ON papf.person_id = paaf.person_id 
       inner join hr_locations_all hla 
               ON paaf.location_id = hla.location_id 
WHERE  ( Trunc(SYSDATE) BETWEEN PAPF.effective_start_date AND 
                                PAPF.effective_end_date ) 
       --and (vheda.e_in_time is not null) 
       AND vheda.e_duration <> 0 
       AND ( Trunc(SYSDATE) BETWEEN PAAF.effective_start_date AND 
                                    PAAF.effective_end_date ) 
       AND vheda.e_date BETWEEN '1-aug-2014' AND '31-oct-2014' 
GROUP  BY To_char(vheda.e_date, 'MON/YYYY'),
          hla.location_code
ORDER  BY vheda.e_date 

例如,让我们看一下EMP表,

SQL> SELECT To_char(hiredate, 'MON/YYYY') AS Months,
  2         deptno,
  3         Count(empno)                  emp_count
  4  FROM   emp
  5  GROUP  BY To_char(hiredate, 'MON/YYYY'),
  6            deptno
  7  /

MONTHS       DEPTNO  EMP_COUNT
-------- ---------- ----------
DEC/1980         20          1
JUN/1981         10          1
NOV/1981         10          1
MAY/1987         20          1
FEB/1981         30          2
MAY/1981         30          1
DEC/1981         30          1
JAN/1982         10          1
SEP/1981         30          2
DEC/1981         20          1
APR/1981         20          1
APR/1987         20          1

12 rows selected.

SQL>

答案 2 :(得分:1)

select EXTRACT(MONTH FROM e_date)||'/'|| EXTRACT(Year FROM e_date) as months , location_code,    count(employee_number) 
FROM ...
group by EXTRACT(MONTH FROM e_date)||'/'|| EXTRACT(Year FROM e_date), location_code

您还可以在GROUP BY子句中使用EXTRACT函数。 我希望它有所帮助......