【问题标题】:Oracle SQL return static value if no row found in Select如果在 Select 中找不到行,Oracle SQL 返回静态值
【发布时间】:2021-08-04 17:23:05
【问题描述】:

我正在组合来自几个不同表的数据,但遇到了一个问题,即其中一个表 (sloc.export_code) 有时包含数据,有时为 NULL,有时没有条目。如果它有数据或为 NULL,那么我能够成功检索数据,如果数据不存在,我会遇到问题。如果没有行,我想返回 MISSING,就像我在 NULL 中的数据一样。

这是我在这一点上的声明。任何帮助将不胜感激。

SELECT
    THC.TRAN_HDR_CATEGORY_PK AS "DB ID",
    'PBI' AS "Order Type",
    THC.INVOICE_NUMBER AS "Invoice Number",
    supl.SUPPLY_CODE AS "Vendor Code",
    supl.supply_name AS "Vendor Name",
    LOC.location_name AS "Location Name",
    NVL(sloc.export_code, 'MISSING') AS "LOC Vendor Export Code",
    THC.INVOICE_AMOUNT AS "Invoice Amount",
    THC.ENTRY_DATE AS "Order Date",
    CASE WHEN (THC.Extract_AP_PK) IS NULL THEN 'NO' ELSE 'YES' END AS "Exported"
 
FROM
    T_TRAN_HDR_CATEGORY THC,
    t_location loc,
    t_supply supl,
    T_SUPPLY_LOCATION sloc
    
WHERE
    THC.LOCATION_ID = LOC.location_id
    AND THC.LOCATION_ID = SLOC.LOCATION_ID
    AND supl.supply_id = THC.SUPPLY_ID
    AND THC.SUPPLY_ID = SLOC.supply_id
    AND THC.ENTRY_DATE >= SYSDATE -7

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    使用正确的INNER 连接和ON 子句,并为表T_SUPPLY_LOCATION 使用LEFT 连接:

    FROM
        T_TRAN_HDR_CATEGORY THC
        INNER JOIN t_location loc ON THC.LOCATION_ID = loc.location_id
        INNER JOIN t_supply supl ON supl.supply_id = THC.SUPPLY_ID
        LEFT JOIN T_SUPPLY_LOCATION sloc ON THC.SUPPLY_ID = sloc.supply_id
    WHERE
        THC.ENTRY_DATE >= SYSDATE -7
    

    【讨论】:

    • 谢谢!我只需要调整一件,效果很好。非常感谢:-)
    猜你喜欢
    • 2020-08-23
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多