Oracle SQL - подсчет количества заданий в месяц - PullRequest
0 голосов
/ 08 ноября 2019

Я рассчитываю подсчитывать общее количество раз, когда тип задания (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

1 Ответ

1 голос
/ 08 ноября 2019

В основном вы должны сгруппировать данные также по месяцам:

select area.area_name,  EXTRACT(MONTH FROM job.actual_start_date) mon,  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_key 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,  EXTRACT(MONTH FROM job.actual_start_date)
order by area.area_name

Вместо EXTRACT(MONTH FROM job.actual_start_date) вы также можете использовать TO_CHAR(job.actual_start_date, 'Month') для имени вместо числа.

Чтобы получить желаемый результат (месяц как столбцы, а не строки), вы можете использовать сводку:

SELECT *
  FROM (select area.area_name,  EXTRACT(MONTH FROM job.actual_start_date) mon
          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_key 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')
PIVOT (
  COUNT(*)
  FOR mon IN (1 AS January, 2 AS February, 3 AS March, 4 AS April, 5 AS May, 6 AS June, 7 AS July, 8 AS August, 9 AS September, 10 AS October, 11 AS November, 12 AS December)
)

Чтобы разделить данные также по годам, просто добавьте столбец EXTRACT(YEAR FROM job.actual_start_date) везде, где сейчас есть EXTRACT(MONTH FROM job.actual_start_date).

...