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" 只是一个计数。您的问题未指定 * 用于指定日期的列。因此,需要填写该元素。
我不确定我是否会正确解释这一点,所以提前道歉。
我想整理一份报告,显示某个网站(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" 只是一个计数。您的问题未指定 * 用于指定日期的列。因此,需要填写该元素。