在Oracle SQL中将两个报告合并为一个

时间:2019-06-05 09:18:29

标签: sql oracle report

我有两个工作报告/数据源,但想将它们合并为一个。 我不太确定哪些部分应该放在哪里,什么部分需要放在哪个括号内。

对于将这些内容合并到一个报告中的一些帮助,将不胜感激,两个报告之间的链接字段为job.job_number字段。

编辑:最后我想看到的是一份报告,其中提供了以下标题:

ALL FROM REPORT / DATASOURCE ONE
Job.Job_number                       410000378
job.site_code                        1372
job.job_entry_date                   31/01/2019 17:45:23
job.actual_comp_date                 04/06/2019
central_site.site_name               HIGH STREET, NEWPORT
area.area_name                       NEWPORT
zone_1_area_check                    ZONE 1 AREA
day_logged                           Thu
week_on_site                         5
job_type.job_type_code               FLY1
job_type.job_type_name               FLYTIP ZONE 1 AREA
Gang_Photos                          Photos Linked
Photo_Count                          2
Photo Check                          Pass
Arrived_on_time_check                Pass
KPI_PASS_FAIL                        Pass
KPI_PENALTY_INSTANCES                0
KPI_STATUS_CHECK                     Pass
JOB_KPI                              KPI 2 - FLY TIPPING
KPI_POINTS                           25
Week_dashboard                       Current Week
Month_dashboard                      Current Month
Quarter_dashboard                    Current Quarter

ALL FROM DATA-SOURCE TWO:
clock_start                          01/02/2019 08:00:00
target_time                          01/02/2019 12:00:00
priority.priority_code               GC06

第一个报告/数据源代码:

select
job.job_number,
job.job_entry_date,
job.site_code,
central_site.site_name,
area.area_name as Parish,
JOB.JOB_ENTRY_DATE as Job_logged,
priority.priority_code,
priority.priority_name,
job.target_comp_date as Target_On_Site,
job.actual_START_date as Actual_On_Site,
JOB.actual_COMP_DATE as Job_Completed_Time,

CASE
WHEN   central_site.site_code in     
                                ('456','1372','1373','1426','1432','2251',
                                '3202','3206','4017','9978','9979','9980',
                                '9981','9982','9983','9984','9985','9986',
                                '9987','9988','9989','9990','9991','9992',
                                '9993','9994','9995','9996','9997','9998',
                                '9999')
THEN 'Zone 1 Area' 
ELSE '' 
END as ZONE_1_AREA_CHECK,


TO_CHAR(job.job_entry_date, 'Dy') as DAY_LOGGED,
TO_CHAR(job.actual_start_date, 'IW') as WEEK_ON_SITE,
job_type.job_type_code,
job_type.job_type_name,

-- CHECK TO SEE IF 2 PHOTOS HAVE BEEN TAKEN ON JOB
CAST(CASE WHEN document_link.entity_key IS NULL THEN 'No Photos' ELSE 
'Photos Linked' END as VARCHAR (20)) as gang_photos,
(SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) AND
document_link.entity_type = 'JOB' AND
document_link.document_notes LIKE 'Photo added by_%' ) as Photo_count,
CASE 
WHEN ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) AND
document_link.entity_type = 'JOB'),2) >=2 then 'Pass' else 'FAIL' end as 
Photo_Check, 

-- kpi tracker
CASE
WHEN job.actual_start_date is null AND current_date < job.target_comp_date 
THEN 'Not arrived on site yet'
WHEN job.actual_start_date is null AND current_date > job.target_comp_date 
THEN 'FAIL (2)'
when job.actual_start_date <= job.target_comp_date then 'Pass'
when job.actual_start_date > job.target_comp_date then 'FAIL'
ELSE 'Overdue' END as Arrived_on_time_check,

-- KPI arrive on site and 2 photos check
CASE
WHEN  job.actual_start_date <= job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) AND 
document_link.entity_type = 'JOB'),2) >=2 then 'Pass' else 'Fail' end as 
KPI_PASS_FAIL,


-- KPI Instances of penalty
CASE
-- arrived on site in time and 2+ photos = 0 penalty  (pass)
WHEN  job.actual_start_date <= job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) >=2 then '0' 

-- arrived on time but no photos attached = 1 penalty  (FAIL PHOTOS)
WHEN  job.actual_start_date <= job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) <=1 then '1' 

--arrived on site late BUT 2+ PHOTOS = manual calculation  (FAIL TIME)
WHEN  job.actual_start_date > job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) >=2  THEN 'Manual Calculation - 
Time Fail'

-- ARRIVED LATE AND NOT ENOUGH PHOTOS  (FAIL TIME AND PHOTOS)
WHEN  job.actual_start_date > job.target_comp_date AND
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) <=1 THEN 'Manual Calculation - 
Time and Photo Fail'

 else 'Check' end as KPI_PENALTY_INSTANCES,


-- KPI STATUS CHECK
CASE
-- arrived on site in time and 2+ photos = 0 penalty  (pass)
WHEN  job.actual_start_date <= job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) >=2 then 'PASS' 

-- arrived on time but no photos attached = 1 penalty  (FAIL PHOTOS)
WHEN  job.actual_start_date <= job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) <=1 then 'FAIL - PHOTOS' 

--arrived on site late BUT 2+ PHOTOS = manual calculation  (FAIL TIME)
WHEN  job.actual_start_date > job.target_comp_date AND 
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) >=2  THEN 'FAIL - ARRIVED LATE'

-- ARRIVED LATE AND NOT ENOUGH PHOTOS  (FAIL TIME AND PHOTOS)
WHEN  job.actual_start_date > job.target_comp_date AND
ROUND ((SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) 
AND document_link.entity_type = 'JOB'),2) <=1 THEN 'FAIL - TIME AND PHOTOS'

WHEN job.actual_START_date is NULL then 'FAIL - ARRIVED TIME BLANK'

else 'Check' end as KPI_STATUS_CHECK,


-- JOB KPI ATTRIBUTE LOOK UP IN GJOB TABLE
(SELECT attribute_value.attrib_value_name FROM attribute_value WHERE 
attribute_value.attrib_type_code = 'GJOB' 
AND attribute_value.attrib_value_code = job_type.job_type_code) as JOB_KPI,

-- JOB KPI PENALTY POINTS LOOK UP IN GJOB TABLE
(SELECT attribute_value.attrib_value_nom FROM attribute_value WHERE 
attribute_value.attrib_type_code = 'GJOB' 
AND attribute_value.attrib_value_code = job_type.job_type_code) as 
KPI_POINTS,



-- FIELDS FOR USE IN DASHBOARD WIDGETS
CASE
when job.actual_comp_date >= trunc(trunc(SYSDATE,'IW')-1,'IW') AND 
job.actual_comp_date <=trunc(SYSDATE,'IW') then 'Previous Week'
when job.actual_comp_date >=trunc(SYSDATE,'IW') AND job.actual_comp_date <= 
SYSDATE then 'Current Week'
else ''
end as Week_Dashboard,

CASE
when job.actual_comp_date >= trunc(trunc(SYSDATE,'MM')-1,'MM') AND 
job.actual_comp_date <=trunc(SYSDATE,'MM') then 'Previous Month'
when job.actual_comp_date >=trunc(SYSDATE,'MM') AND job.actual_comp_date <= 
SYSDATE then 'Current Month'
else ''
end as Month_Dashboard,

CASE
when job.actual_comp_date >= trunc(trunc(SYSDATE,'IW')-1,'Q') AND 
job.actual_comp_date <=trunc(SYSDATE,'Q') then 'Previous Quarter'
when job.actual_comp_date >=trunc(SYSDATE,'Q') AND job.actual_comp_date <= 
SYSDATE then 'Current Quarter'
else ''
end as Quarter_Dashboard

from
job
left join enquiry on job.job_number = enquiry.job_number
left join defect on job.job_number = defect.job_number
left join defect_type on defect_type.defect_type_code = defect.defect_type
inner join central_site on job.site_code = central_site.site_code
inner join area on central_site.area_code = area.area_code
left join central_enquiry on central_enquiry.enquiry_number = 
enquiry.enquiry_number
left join enquiry_cust_link on central_enquiry.enquiry_number = 
enquiry_cust_link.enquiry_number
left join enquiry_subject on enquiry_subject.subject_code = 
central_enquiry.subject_code
left join type_of_service on type_of_service.service_code = 
enquiry_subject.service_code
inner join priority on priority.priority_code = job.priority_code
inner join JOB_STATUS_LOG on JOB.JOB_NUMBER = JOB_STATUS_LOG.JOB_NUMBER 
and job.job_log_number = job_status_log.job_log_number
inner join JOB_STATUS on JOB_STATUS.STATUS_CODE = JOB_STATUS_LOG.STATUS_CODE
inner join job_type on job_type.job_type_key = job.job_type_key
inner join priority on priority.priority_code = job.priority_code

LEFT OUTER JOIN
(SELECT DISTINCT
job.job_number,
document_link.entity_key,
(SELECT COUNT(document_link.entity_key) FROM document_link WHERE 
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) AND
document_link.entity_type = 'JOB' AND
document_link.document_notes LIKE 'Photo added by_%' ) as Photo_count
FROM
job
LEFT OUTER JOIN
document_link
ON
document_link.entity_key =CAST( job.job_number as VARCHAR (15)) AND
document_link.entity_type = 'JOB' AND
document_link.document_notes LIKE 'Photo added by_%') document_link
ON
document_link.job_number = job.job_number

where
job_status_log.allocated_officer = 'IDVE' and
job_status_log.status_code in ('5100','5200','5300','5400') 

order by
job.job_number

第二份报告/数据源代码:

select job_number, priority_code, job_entry_date, clock_start, 
target_comp_date,
case
when to_char(target_time, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') = 'Fri'
and floor((target_time - trunc(target_time)) * 24) >= 17
then target_time + 2 + 63/24
when floor((target_time - trunc(target_time)) * 24) >= 17
then target_time + 15/24
else target_time
end as target_time

from (
select job_number, priority_code, job_entry_date, clock_start, 
TARGET_COMP_DATE,
CASE 
WHEN PRIORITY_CODE IN ('GC01','GC02','GC03','GC04','GC05','GC06','GC07') 
THEN
clock_start 
+ case priority_code 
when 'GC01' then 1 
when 'GC02' then 2 
when 'GC03' then 0.5
when 'GC04' then 1 
when 'GC05' then 2 
when 'GC06' then 4
when 'GC07' then 24

end
/ 24 

ELSE
TARGET_COMP_DATE END as target_time

from              (
select job_number, priority_code, job_entry_date, target_comp_date,
case
when to_char(job_entry_date, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') = 'Fri'
and floor((job_entry_date - trunc(job_entry_date)) * 24) >= 17
then trunc(job_entry_date) + 80/24
when to_char(job_entry_date, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') = 'Sat'
then trunc(job_entry_date) + 56/24
when to_char(job_entry_date, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') = 'Sun'
or floor((job_entry_date - trunc(job_entry_date)) * 24) >= 17
then trunc(job_entry_date) + 32/24
when floor((job_entry_date - trunc(job_entry_date)) * 24) < 8
then trunc(job_entry_date) + 8/24
else job_entry_date
end as clock_start
from job
  )
)

0 个答案:

没有答案