Plsql 按功能列分组

Plsql 按功能列分组,plsql,oracle11g,oracle-sqldeveloper,Plsql,Oracle11g,Oracle Sqldeveloper,我正在写一个这样的问题 从中选择以月为单位的字符(e_日期,'MON/YYYY')、地点代码、计数(员工编号) 现在我想按月份和地点代码分组。那么,如何在GROUPBY子句中将to_char(e_date,'MON/YYYY')用作月份 编辑: select to_char(vheda.e_date, 'MON/YYYY') as Months , hla.location_code, count(vheda.employee_number) emp_count from virtu.virt

我正在写一个这样的问题

中选择以月为单位的字符(e_日期,'MON/YYYY')、地点代码、计数(员工编号)

现在我想按月份和地点代码分组。那么,如何在GROUPBY子句中将
to_char(e_date,'MON/YYYY')用作月份

编辑:

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
选择将字符(vheda.e\u日期,'MON/YYYY')作为月份,hla.location\u代码,计数(vheda.employee\u编号)emp\u计数从
virtu.virt\u hr\u emp\u每日出勤vheda
vheda.party\u id=papf.party\u id上每个人的内部连接
papf.person\u id=paaf.person\u id上的每个paaf所有paaf分配的内部联接
内部连接hr\U位置\U paaf上的所有hla.location\U id=hla.location\U id
式中(PAPF.effect\u START\u DATE和PAPF.effect\u END\u DATE之间的trunc(sysdate))
--和(vheda.e_in_time不为空)
和vheda.e_持续时间0
和(PAAF.effect\u START\u DATE和PAAF.effect\u END\u DATE之间的trunc(sysdate))
和vheda.e_日期介于“2014年8月1日”和“2014年10月31日”之间
按hla.location\u代码、vheda.e\u日期分组
按vheda.e_日期订购
使用GROUP BY子句时输出
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 hla.location_code, vheda.e_date
order by vheda.e_date
ORA-00979:不是表达式的组 97900000-“不是表达式的组” *原因:
*行动:
第58行第37列出现错误您需要根据
分组到字符(vheda.e_日期,'MON/YYYY')和hla.location_代码

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
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 
您还可以在GROUPBY子句中使用EXTRACT函数。。
我希望这会有帮助。

@Chathuranga那么您在选择列表中还有其他内容。提供更多细节please@Chathuranga你能发布整个查询吗?或者至少选择并分组,以便我需要删除vheda.e_date并向_char添加新内容column@Chathuranga是的,您需要按hla.location\u代码分组到\u char(vheda.e\u date,'MON/YYYY'),但它给出了一个错误:(i,m usng oracle sql developer tool),但这给出了一个错误“不是按表达式分组”当我在group by子句中使用To_char…时,显示来自SQL*Plus的会话结果,就像我所做的那样。复制粘贴并编辑您的问题。可能重复的
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