我在查询中使用了三个表; AP_INVOICES_INTERFACE
、AP_INVOICE_LINES_INTERFACE
和PO_HEADERS_ALL
作为子查询。
AP_INVOICE_LINES_INTERFACE表仅在从AP_INVOICE_LINES_INTERFACE到PO_HEADERS_ALL中的SEGMENT1
的PO_NUMBER
上与PO_HEADERS_ALL联接。我希望使用REQ_BU_ID值填写列'REQ_BU_ID2',该值基于SEGMENT1
等于LN.PO_NUMBER
,而不是NULL
。
SELECT HDR.INVOICE_ID , HDR.PO_NUMBER , LN.PO_NUMBER LN_PO_NUMBER
, (SELECT PO2.REQ_BU_ID
FROM PO_HEADERS_ALL PO2
WHERE PO2.SEGMENT1 = LN.PO_NUMBER
AND PO2.REQ_BU_ID IS NOT NULL
AND LN.PO_NUMBER IS NOT NULL
--AND HDR.PO_NUMBER IS NOT NULL
AND rownum = 1 ) REQ_BU_ID2
FROM AP_INVOICES_INTERFACE HDR
INNER JOIN AP_INVOICE_LINES_INTERFACE LN ON LN.INVOICE_ID = HDR.INVOICE_ID
AND HDR.INVOICE_ID = 300000136747640
即使LN.PO_NUMBER
为NULL
,我也要填充行的REQ_BU_ID2
(非空)值,因此我认为通过在子查询中使用AND LN.PO_NUMBER IS NOT NULL
条件,将只返回非空值,但是,正如您所看到的,它仍然在结果中返回Null
:
上述查询的当前结果:
预期结果:
编辑:
INVOICE_ID REQ_BU_ID2 PO_NUMBER LN_PO_NUMBER
300000136747640 300000006290049 K11004499
300000136747640
300000136747640
300000136747640 300000006290049 K11004499
1条答案
按热度按时间wgxvkvu91#
下面使用CTE为所有
INVOICE_ID
提供相同的LN_PO_NUMBER
。如果它们可以合法地***曾经***拥有不同的“非NULL”
PO_NUMBER
,这将不起作用。然后,您的子查询已被修改为使用
ORDER BY REQ_BU_ID DESC FETCH NEXT 1 ROWS ONLY
,以便以确定性的方式精确地查找一个REQ_BU_ID
,首选非NULL值。同样,如果任何
PO_NUMBER
可以合法地关联到多于1个非NULLREQ_BU_ID
,这将不起作用。同样,如果找到ZERO
REQ_BU_ID
,它仍返回NULL
。演示:https://dbfiddle.uk/N9fb6W9I
***编辑:***或者...