我的问题如下
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';
这是给我6个记录,其中1个gxs_日期,x_ack_type='缺席'。这里需要rn函数只从子查询中提取1条记录,但要求所有6条记录都具有相同的日期和确认类型,这是不发生的。我怎样才能做到这一点?请参考下面的屏幕截图,我需要所有6行数字的x_ack_type=ak和所有这6条记录的gxs_date=3/6/2020。
我的当前数据截图在这里
1条答案
按热度按时间l3zydbqr1#
而不是
在
SELECT
子句使用LAG
功能如下:或者如果总有一个
ACK_TABLE.GXS_DATE
存在于HEADER_TABLE.SEGMENT1
然后你可以简单地把它写成--更新--
为了
ACK_TYPE
,则需要在中应用相同的逻辑ELSE
原始查询中case语句的以下部分:替换此项:
有了这个: