Хорошо, сначала я попытаюсь объяснить, что я пытаюсь сделать. Я пытаюсь создать отчет, который возвращает все оценки, назначенные клиенту. Каждой оценке должно соответствовать событие, и наоборот (к сожалению, между ними нет токена, поэтому я должен определить правильное событие на основе дат). Тем не менее, событие иногда отсутствует, или оценка иногда отсутствует. Я хочу охватить все это, чтобы я мог сообщить, где отсутствуют недостающие оценки или события, и исправить их. В его самой простой форме, это то, что я ожидаю, что отчет будет выглядеть. Однако есть несколько других условий, таких как возвращение определенного типа оценки и определенного типа события.
ID Assessment Event
1 A1 B1
2 A2
3 B3
В настоящее время у меня есть 2 запроса, которые показывают мне все оценки с соответствующими событиями (если они есть) и все события с соответствующими оценками (если они есть). Кажется, они оба работают хорошо, но мне бы очень хотелось объединить два запроса (идентификатор был бы общим в обоих запросах). Я пытался сделать это сам, но это не совсем работает, так что я надеюсь, что если я опубликую оба моих рабочих запроса, кто-то сможет помочь!
Это возвращает оценки с соответствующим событием (если оно присутствует).
SELECT
"CLIENTID",
"Name",
"ASSESSMENT_ID",
"Assessment_Start",
"Assessment_End",
"Days open",
"Authorised",
"Worker",
"Event_ID",
"Event_Start"
FROM
(SELECT
OAS.ASM_SUBJECT_ID as "CLIENTID",
nvl(olm_bo.get_name(OAS.ASM_SUBJECT_ID,OAS.ASM_SUBJECT_IND),'') as "Name",
OAS.ASM_ID as ASSESSMENT_ID,
olm_bo.working_days(OAS.ASM_START_DATE, OAS.ASM_END_DATE) -1 as "Days open",
OAS.ASM_AUTH_DATETIME as "Authorised",
OAS.ASM_START_DATE as "Assessment_Start",
OAS.ASM_END_DATE as "Assessment_End",
nvl(olm_bo.get_ref_desc(OAS.ASM_OUTCOME,'ASM_OUTCOME'),'') as "Outcome",
nvl(olm_bo.get_org_name(ORE.RES_PARTY_OUN_ID),'') as "Team",
initcap(nvl(olm_bo.get_per_name(ORE.RES_PARTY_ID),'')) as "Worker",
OSE.SEV_ID as "Event_ID",
to_char(trunc(OSE.SEV_ACTUAL_DATE),'DD/MM/YYYY') as "Event_Start",
OSE.SEV_OUTCOME_DATE as "Event_End",
nvl(decode(OSE.SEV_CLASS,'CPINVEST',olm_bo.get_ref_desc (OSE.SEV_REASON_CODE,'CP_JUSTIFICATION'),olm_bo.get_ref_desc (OSE.SEV_REASON_CODE,'REASON_CODE')),'') as "Event Outcome",
row_number() over(PARTITION BY OAS.ASM_ID
ORDER BY
abs(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE))as "Row Number"
FROM O_ASSESSMENTS OAS
INNER JOIN O_RESPONSIBILITIES ORE ON OAS.ASM_ID = ORE.RES_REC_ID
AND nvl(olm_bo.get_org_name(ORE.RES_PARTY_OUN_ID),'') = '#Team#'
LEFT JOIN O_SERVICE_EVENTS OSE ON OAS.ASM_SUBJECT_ID = OSE.SEV_SUBJECT_ID
AND
OSE.SEV_CODE IN ('INI')
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) >= -7
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) <= 7
Where OAS.ASM_QSA_ID IN ('A1','A2')
AND
nvl(olm_bo.get_ref_desc(OAS.ASM_OUTCOME,'ASM_OUTCOME'),'NULL') NOT IN ( 'Abandon' )
AND
(
OAS.ASM_END_DATE Is Null
OR
OAS.ASM_AUTH_DATETIME Is Null
)
) WHERE "Row Number" = 1
Это возвращает события с их соответствующей оценкой (если присутствует).
SELECT
"CLIENTID",
"Name",
"Event_ID",
"Event_Start",
"Event_End",
"Days_open",
"Worker",
"Team",
"Assessment_ID",
"Assessment_Start",
"Assessment_End",
FROM
(SELECT
OSE.SEV_SUBJECT_ID as "CLIENTID",
nvl(olm_bo.get_name(OSE.SEV_SUBJECT_ID,OSE.SEV_SUBJECT_IND),'') as "Name",
OAS.ASM_ID as "Assessment_ID",
olm_bo.working_days(OSE.SEV_ACTUAL_DATE, OSE.SEV_OUTCOME_DATE) -1 as "Days_open",
OAS.ASM_START_DATE as "Assessment_Start",
OAS.ASM_END_DATE as "Assessment_End",
olm_bo.get_org_name(OSE.SEV_OUN_SHORT_NAME) as "Team",
olm_bo.get_event_worker(OSE.SEV_ID,'NAME') as "Worker",
OSE.SEV_ID as "Event_ID",
to_char(trunc(OSE.SEV_ACTUAL_DATE),'DD/MM/YYYY') as "Event_Start",
OSE.SEV_OUTCOME_DATE as "Event_End",
nvl(decode(OSE.SEV_CLASS,'CPINVEST',olm_bo.get_ref_desc (OSE.SEV_REASON_CODE,'CP_JUSTIFICATION'),olm_bo.get_ref_desc(OSE.SEV_REASON_CODE,'REASON_CODE')),'') as "Event Outcome",
row_number() over(PARTITION BY OSE.SEV_SUBJECT_ID
ORDER BY
abs(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE))as "Row Number"
FROM O_SERVICE_EVENTS OSE
LEFT JOIN O_ASSESSMENTS OAS ON OAS.ASM_SUBJECT_ID = OSE.SEV_SUBJECT_ID AND nvl (olm_bo.get_ref_desc(OAS.ASM_OUTCOME,'ASM_OUTCOME'),'NULL') NOT IN ( 'Abandon' )
AND
OAS.ASM_QSA_ID IN ('A1','A2')
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) >= -7
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) <= 7
Where OSE.SEV_CODE IN ('INITASS')
AND
olm_bo.get_org_name(OSE.SEV_OUN_SHORT_NAME) = '#Team#'
AND
(
OSE.SEV_OUTCOME_DATE Is Null
)
) WHERE "Row Number" = 1
Существуют также некоторые уловы с объединенным отчетом - у событий и оценок могут быть разные команды или работники, поэтому мне, вероятно, потребуется определить отдельную команду мероприятия и работников мероприятия из группы оценки и работника мероприятия. Я действительно думал, что этого можно достичь путем внешнего объединения или объединения оценок и событий в отдельной таблице, которая возвращает всех клиентов с оценкой или событием, но, как уже упоминалось, результаты никогда не складывались отдельные запросы. Я думаю, что это может быть связано с условием номер строки = 1, это поможет вернуть соответствующую оценку событию или наоборот, но я думаю, что при попытке присоединиться к ним, это может вызвать некоторые из проблемы? В любом случае, спасибо за ваше время - я буду продолжать возиться и посмотреть, смогу ли я найти решение, но любые советы или предложения будут высоко оценены.