Oracle SQL - 每月计算一个站点在结果中出现的次数

Oracle SQL - Count, per month, how many times a site appears in the results

我不确定我是否会正确解释这一点,所以提前道歉。

我想整理一份报告,显示某个网站(central_site.site_code 和 central_site.site_name)在报告中出现的次数,然后将每个月的总和加起来总计在最后。汇总为月份值的日期为 job.actual_start_date

我要找的是这样的东西:

 Site Code       Site Name        April     May     June     July    August     Total
   1234         HIGH STREET         2        4        3        3        2         14
   3093         4TH AVENUE          10       5        8        8        7         38

到目前为止,我得到的用于生成我想以上述格式总结的所有信息的代码是:

select
central_site.site_code,
central_site.site_name,
job.actual_start_date

from
central_site
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_code = 'G012' and
job_status_log.status_code = '5200'

我只是不知道语法/公式能够每月对每个站点进行总计,然后提供全年的总计。

我想你想要条件聚合:

select cs.site_code, cs.site_name,
       sum(case when extract(month from ?.datecol) = 1 then 1 else 0 end) as jan,
       sum(case when extract(month from ?.datecol) = 2 then 1 else 0 end) as feb,
       . . .,
       count(*) as year_total
from central_site cs join
     job j
     on j.site_code = cs.site_code join
     job_type jt
     on j.job_type_key = jt.job_type_key join
     job_status_log jsl
     on j.job_number = js.job_number
where jt.job_type_code = 'G012' and
      jsl.status_code = '5200' and
      ?.datecol >= date '2018-01-01' and
      ?.datecol < date '2019-01-01'
group by cs.site_code, cs.site_name;

这是假设 "number of times" 只是一个计数。您的问题未指定 * 用于指定日期的列。因此,需要填写该元素。