【问题标题】:Want subquery to return non-Null values希望子查询返回非空值
【发布时间】:2022-11-20 02:44:03
【问题描述】:

我在查询中使用了三个表; AP_INVOICES_INTERFACEAP_INVOICE_LINES_INTERFACEPO_HEADERS_ALL 作为子查询。

AP_INVOICE_LINES_INTERFACE 表仅在 PO_NUMBER 上从 AP_INVOICE_LINES_INTERFACE 连接到 PO_HEADERS_ALL 中的 SEGMENT1。我想用基于 SEGMENT1 等于 LN.PO_NUMBER 的 REQ_BU_ID 值填充“REQ_BU_ID2”列,而不是 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

我想填充行的 REQ_BU_ID2(非空)值,即使 LN.PO_NUMBERNULL 所以我想通过在子查询中使用 AND LN.PO_NUMBER IS NOT NULL 条件然后只返回非空值,但是如您所见,它仍在结果中返回Null

上述查询的当前结果:

期望的结果:

【问题讨论】:

  • 如果相关子查询没有找到任何行,它返回 NULL。这不会导致排除外部查询中的任何行。您需要在外部查询中排除它们,而不是相关的子查询。
  • 请阅读此内容,然后编辑您的问题:Please do not upload images of code/data/errors.

标签: sql oracle-sqldeveloper


【解决方案1】:

使用 oracle NVL-函数:

    SELECT HDR.INVOICE_ID,  nvl(REQ_BU_ID2,300000136747640) REQ_BU_ID2, 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
;

【讨论】:

  • 感谢您的建议,但是 REQ_BU_ID 只是子查询表 PO_HEADERS_ALL 中的一列,所以我认为这行不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2012-02-19
  • 2022-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多