Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-统计每月的作业数_Sql_Oracle_Count - Fatal编程技术网

Oracle SQL-统计每月的作业数

Oracle SQL-统计每月的作业数,sql,oracle,count,Sql,Oracle,Count,我希望统计每个月出现一种类型的工作G012的总时间,每个区域的状态代码为“5200” 到目前为止,我掌握的代码是: select area.area_name, count(area.area_name) from area inner join central_site on central_site.area_code = area.area_code inner join job on job.site_code = central_site.site_code inner join jo

我希望统计每个月出现一种类型的工作G012的总时间,每个区域的状态代码为“5200”

到目前为止,我掌握的代码是:

select area.area_name, count(area.area_name)
from area
inner join central_site on central_site.area_code = area.area_code
inner join job on job.site_code = central_site.site_code
inner join job_type on job.job_type_key = job_type.job_type_key
inner join job_status_log on job.job_number = job_status_log.job_number
where job_type.job_type_key = 'G012' and job_status_log.status_code = '5200'
group by area.area_name
order by area.area_name
我不知道如何计算这些数据,以便每个月都属于不同的类别,但我希望最终得到的结果是:

Area             April     May     June    July    August    September    October
North Ward         2        5        3       2        7         4            3
South Ward         2        3        4       4        6         4            4

基本上,您还必须按月份对数据进行分组:

选择area.area\u name,从作业中提取月份。实际开始日期mon,countarea.area\u name 从地区 中心站点上的内部连接中心站点。区域代码=区域。区域代码 job.site\u代码上的内部联接作业=中心站点.site\u代码 内部联接作业\u类型\u键在作业上。作业\u类型\u键=作业\u类型。作业\u类型\u键 内部联接作业\状态\登录作业。作业\编号=作业\状态\日志。作业\编号 其中job_type.job_type_key='G012'和job_status_log.status_code='5200' 按区域分组。区域名称,从作业开始的月份。实际开始日期 按区域排序。区域名称 除了从job.actual\u start\u date提取月份之外,您还可以使用“月”作为名称而不是数字

要以列而不是行的形式获取所需的输出月份,可以使用pivot:

挑选* 从选择area.area\u name,从job.actual\u start\u date mon提取月份 从地区 中心站点上的内部连接中心站点。区域代码=区域。区域代码 job.site\u代码上的内部联接作业=中心站点.site\u代码 内部联接作业\u类型\u键在作业上。作业\u类型\u键=作业\u类型。作业\u类型\u键 内部联接作业\状态\登录作业。作业\编号=作业\状态\日志。作业\编号 其中job_type.job_type_key='G012'和job_status_log.status_code='5200' 支点 计数* 周一为1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月
要将数据也按年份分开,只需添加一个EXTRACTYEAR FROM job.actual\u start\u date列即可。EXTRACTMONTH FROM job.actual\u start\u date现在到处都有。您的数据库中有日期列吗?您考虑过pivot吗?date列将来自job。actual\u start\u date我对Oracle SQL比较陌生,不知道应该考虑不同年份的pivot是哪个月作为一个整体?谢谢你-但它现在给我错误消息[Oracle][ODBC][Ora]Ora-01722:invalid numberHmm,基本查询对我有效,但我无法使用你的内部选择进行测试。我想你的数据一定有问题。job.actual_start_date是什么数据类型?job.actual_start_date是一个日期时间字段,返回值如2019年2月1日12:13:34。我想知道这是否是因为它正在尝试合计area.area\u name,而这不是一个数字,而是一个文本?不,它与area\u name是一个字符串无关。必须有一些等式来比较varchar2和数字,最有可能是在一个连接条件下。这没有问题,因为oracle在获取非数字值之前会执行隐式强制转换。它也可能是应用程序中的调用点。也许您已经将返回值定义为varchar2,integer,现在添加了一个新列mon,该列的月份名称为new second column,该列不会返回预期的整数,而是返回新的月份字符串。