Я присоединился к нескольким таблицам, чтобы получить данные, относящиеся к сертификации сотрудниками. У меня есть запрос, который дает мне идентификатор сотрудника, имя, дату начала сертификации JPM_DATE_6, дату окончания сертификации JPM_DATE_3 и список всех сертификатов (JPM_DESCR90), объединенных и разделенных символом ',' в столбце.
SELECT DISTINCT A.EMPLID, A.JOBCODE, A.JOBCODE_DESCR, A.EMPL_STATUS,
A.LOCATION, A.LOCATION_DESCR, A.NAME, E.EMAILID, B.EMPLID, E.OPRID,LISTAGG(C.JPM_DESCR90,',') WITHIN GROUP ( ORDER BY
C.JPM_DESCR90) AS CertConcat
FROM PS_NPS_VIEW_ALL A, (PS_PERSON_NAME B LEFT OUTER JOIN PS_NPS_LIC_VW_RPT
C ON B.EMPLID = C.EMPLID ), PSOPRDEFN E
WHERE ( A.EFFDT =
(SELECT MAX(A_ED.EFFDT) FROM PS_NPS_VIEW_ALL A_ED
WHERE A.EMPLID = A_ED.EMPLID
AND A.EMPL_RCD = A_ED.EMPL_RCD
AND A_ED.EFFDT <= SYSDATE)
AND A.EFFSEQ =
(SELECT MAX(A_ES.EFFSEQ) FROM PS_NPS_VIEW_ALL A_ES
WHERE A.EMPLID = A_ES.EMPLID
AND A.EMPL_RCD = A_ES.EMPL_RCD
AND A.EFFDT = A_ES.EFFDT)
AND A.EMPLID = B.EMPLID
AND A.EMPLID = E.EMPLID
AND A.PER_ORG = 'EMP'
AND A.EMPL_STATUS='A'
AND A.PAYGROUP NOT IN ('SUM','CWR'))
GROUP BY A.EMPLID, A.JOBCODE,A.JOBCODE_DESCR, A.EMPL_STATUS, A.LOCATION,
A.LOCATION_DESCR, A.NAME, E.EMAILID, B.EMPLID, E.OPRID;
Это дало мне 8257 строк. Затем я попытался получить данные для каждого уникального идентификатора сотрудника, в результате чего я получил бы только одну сертификацию, т.е. самую высокую / последнюю сертификацию, которая имела самую высокую дату окончания сертификации JPM_DATE_3 и название сертификации (JPM_DESCR90)
SELECT DISTINCT A.EMPLID,A.JOBCODE, A.JOBCODE_DESCR, A.EMPL_STATUS,
A.LOCATION, A.LOCATION_DESCR, A.NAME, E.EMAILID, B.EMPLID, E.OPRID,
JPM_DATE_3 ,JPM_DATE_6,JPM_DESCR90
FROM PS_NPS_VIEW_ALL A, (PS_PERSON_NAME B LEFT OUTER JOIN PS_NPS_LIC_VW_RPT
C ON B.EMPLID = C.EMPLID ), PSOPRDEFN E
WHERE ( A.EFFDT =
(SELECT MAX(A_ED.EFFDT) FROM PS_NPS_VIEW_ALL A_ED
WHERE A.EMPLID = A_ED.EMPLID
AND A.EMPL_RCD = A_ED.EMPL_RCD
AND A_ED.EFFDT <= SYSDATE)
AND A.EFFSEQ =
(SELECT MAX(A_ES.EFFSEQ) FROM PS_NPS_VIEW_ALL A_ES
WHERE A.EMPLID = A_ES.EMPLID
AND A.EMPL_RCD = A_ES.EMPL_RCD
AND A.EFFDT = A_ES.EFFDT)
AND A.EMPLID = B.EMPLID
AND A.EMPLID = E.EMPLID
AND A.PER_ORG = 'EMP'
AND A.EMPL_STATUS='A'
AND A.PAYGROUP NOT IN ('SUM','CWR'))
AND C.JPM_DATE_3=(SELECT MAX(JPM_DATE_3) FROM PS_NPS_LIC_VW_RPT V WHERE
V.EMPLID=A.EMPLID and V.EMPLID=B.EMPLID AND V.EMPLID=C.EMPLID AND
V.EMPLID=E.EMPLID )
GROUP BY A.EMPLID,A.JOBCODE, A.JOBCODE_DESCR, A.EMPL_STATUS, A.LOCATION,
A.LOCATION_DESCR, A.NAME, E.EMAILID, B.EMPLID, E.OPRID, JPM_DATE_3
,JPM_DATE_6,JPM_DESCR90;
Однако это дало мне 5807 уникальных рядов. В ходе дальнейших исследований я обнаружил, что было довольно много значений JPM_DATE_3 и JPM_DATE_6, которые были нулевыми, и поэтому я не получал желаемый счетчик. Пожалуйста, предложите изменить запрос, который даст мне уникальные идентификаторы сотрудников. последние сертификаты JPM_DESCR90 для самой высокой даты JPM_DATE_3, а также даст мне строки, где JPM_DATE_3 имеет значение null, чтобы я мог иметь 8257 уникальных строк, которые должны были быть для каждого идентификатора сотрудника.