2014-12-02 113 views
-1

我寫這樣的查詢...集團通過函數列

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 PUT時使用GROUP BY子句group by to_char(vheda.e_date, 'MON/YYYY'), hla.location_code

ORA-00979:不是GROUP BY表達 00979. 00000 - 「不是一個GROUP BY表達「 *原因:
*操作: 錯誤在行:58列:37

+0

可能重複的[ORA-00979不是按表達式分組](http://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression) – Ben 2014-12-02 09:15:55

回答

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 
+0

這是行不通的。說「不是GROUP BY表達式」 – CAD 2014-12-02 07:41:58

+0

@Chathuranga然後你在SELECT列表中有其他東西。請給予更多的細節 – Multisync 2014-12-02 07:43:19

+0

沒關係。只有3列... – CAD 2014-12-02 07:44:39

1

您需要group by To_char(vheda.e_date,'MON/YYYY')和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> 
+0

的最後一部分,但是當我使用To_char ...在group by子句中出現「不是GROUP BY表達式」錯誤時? – CAD 2014-12-02 08:00:49

+0

Show您的會話結果來自SQL * Plus,就像我一樣。複製粘貼並編輯您的問題。 – 2014-12-02 08:06:48

+0

請參閱問題的最後一部分... – CAD 2014-12-02 08:13:29

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 

您還可以使用EXTRACT函數在GROUP BY子句.. 我希望它有助於..