【问题标题】:Oracle SQL display flag status as Y / nullOracle SQL 显示标志状态为 Y / null
【发布时间】:2021-04-24 20:58:52
【问题描述】:

我需要连接 2 个表并根据每个表中数据的可用性显示 FLAG STATUS。

样本数据集

TABLE_A  |  TABLE_B
-------- | ----------
ENO      |    ENO
----     |  ----
100      |   100
101      |   101
102      |

得到类似结果的 oracle SQL 逻辑是什么

ENO A_FLAG B_FLAG
100 Y Y
101 Y Y
102 Y null

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用full join 和条件逻辑:

    select eno,
           (case when a.eno is null then 'N' else 'Y' end) as a_flag,
           (case when b.eno is null then 'N' else 'Y' end) as b_flag
    from a full join
         b
         using (eno);
    

    此版本假定数据中没有重复项,因为您的问题中未提及重复项。如果您有重复项,那么您需要与聚合类似的东西。

    【讨论】:

      【解决方案2】:

      这是OUTER JOIN 的典型演示,其中LEFT OUTER JOIN 足以使用,同时使用FULL JOIN 也是可能的,当更多填充的表(A) 是在左侧说明,以及 NVL2() 函数,它是 NVL() 函数的扩展,根据 NULL 值是否存在而具有不同的选项,例如

      SELECT A.eno, NVL2(A.eno,'Y',A.eno) AS A_flag, NVL2(B.eno,'Y',B.eno) AS B_flag 
        FROM table_A A
        LEFT JOIN table_B B
          ON A.eno = B.eno
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 2023-03-11
        • 1970-01-01
        • 2021-08-04
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        相关资源
        最近更新 更多