내 쿼리는 다음과 같습니다.
SELECT HEADER_TABLE.SEGMENT1,
LINES_TABLE.LINE_NUM,
CASE
WHEN ( HEADER_TABLE.REVISION_NUM = '0'
AND HEADER_TABLE.PRINT_COUNT = '0')
THEN
'Unavailable'
ELSE
NVL (ACK_TABLE.ACK_TYPE, 'Absent')
END
AS X_ACK_TYPE,
ACK_TABLE.GXS_DATE
FROM HEADER_TABLE,
LINES_TABLE,
(SELECT po_number,
po_line_number,
gxs_date,
po_ack_filename,
ack_type
FROM (SELECT po_number,
po_line_number,
gxs_date,
po_ack_filename,
ack_type,
ROW_NUMBER ()
OVER (PARTITION BY po_number ORDER BY gxs_date DESC)
rn
FROM xxcmst_po_ack_from_gxs_stg)
WHERE rn = 1) ACK_TABLE,
(SELECT PO_NUMBER FROM XXCMST.XXCMST_ACTION_TABLE_ACKNOWLEDGEMENT) ACTION_TABLE
WHERE HEADER_TABLE.PO_HEADER_ID = LINES_TABLE.PO_HEADER_ID
AND HEADER_TABLE.SEGMENT1 = ACK_TABLE.PO_NUMBER(+)
AND HEADER_TABLE.SEGMENT1 = ACTION_TABLE.PO_NUMBER(+)
AND LINES_TABLE.LINE_NUM = ACK_TABLE.PO_LINE_NUMBER(+)
AND HEADER_TABLE.SEGMENT1 = '100';
이것은 1 GXS_DATE 및 X_ACK_TYPE = 'Absent'인 6 개의 레코드를 제공합니다. 여기서 RN 함수는 하위 쿼리에서 1 개의 레코드 만 가져 오는 데 필요하지만 6 개의 레코드 모두가 동일한 날짜와 발생하지 않는 ACK_TYPE을 갖도록하는 것입니다. 이것을 어떻게 할 수 있습니까? 아래 스크린 샷을 참조하세요. 6 개의 LINE_NUM 모두에 대해 X_ACK_TYPE = AK가 필요하고이 6 개 레코드 모두에 대해 GXS_DATE = 3/6/2020이 필요합니다.