2014-12-02 4 views
-1

Я пишу запрос, как это ...Группа по функции столбца

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

Теперь я хочу, чтобы сгруппировать по месяцам и Location_code. так как использовать 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

ОР-00979: не GROUP BY выражения 00979. 00000 - «не является группа выражения " * Причина:
* Действие: Ошибка на линии: 58 ​​Колонка: 37

+0

возможный дубликат [ORA-00979 не группа по выражению] (http://stackoverflow.com/questions/1520608/ora-00979-not-a-group-by-expression) – Ben

ответ

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

+0

@Chathuranga Тогда у вас есть что-то еще в списке SELECT. Дайте более подробную информацию, пожалуйста, – Multisync

+0

нет. только 3 столбца ... – CAD

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

, но это дает ошибку «не выражение GROUP BY», когда я использую To_char ... в группе по предложению – CAD

+0

Show ваш результат сеанса от SQL * Plus, как и я. Скопируйте пасту и отредактируйте свой вопрос. –

+0

См. последний раздел в вопросе ... – CAD

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 п .. я надеюсь, что это помогает ..

Смежные вопросы