【问题标题】:Return default value for some IN condition not match返回某些 IN 条件不匹配的默认值
【发布时间】:2020-06-14 12:39:12
【问题描述】:

我认为这应该不难。我正在编写一个 Oracle-SQL 代码来从 SQL 中提取数据:

select ID, Qty from TableOne where ID in ('A', 'B', 'C')

如果 IN 条件中的某些项目匹配,我希望数据库显示查询结果,如果 IN 条件中的这些项目不匹配,则返回默认值。 例如,我希望结果是:

+----+-----------+
| ID |    Qty    |
+----+-----------+
| A  | 3         |
| A  | 5         |
| B  | 4         |
| C  | Not Found |
+----+-----------+

TableOne 中没有 ID = C 的地方。

有没有简单的方法来编码结果? 非常感谢!

【问题讨论】:

标签: sql oracle


【解决方案1】:

您可以将LEFT JOINUNION ALL 一起使用:

WITH ALL_ID AS (
     SELECT 'A' AS ID FROM DUAL UNION ALL
     SELECT 'B' AS ID FROM DUAL UNION ALL
     SELECT 'C' AS ID FROM DUAL 
)
SELECT A.ID, t.Qty -- REPLACE NULL WITH NOT FOUND
FROM ALL_ID A ID LEFT JOIN
     Table t
      ON t.ID = A.ID;

【讨论】:

    【解决方案2】:

    COALESCENVLCASELEFT OUTER JOIN 一起使用,并在子查询因式分解子句中指定ID:

    WITH ids_to_match( id ) AS (
      SELECT 'A' FROM DUAL UNION ALL
      SELECT 'B' FROM DUAL UNION ALL
      SELECT 'C' FROM DUAL
    )
    select i.ID,
           COALESCE( TO_CHAR(Qty), 'Not Found' ) AS Qty
    from   ids_to_match i
           LEFT OUTER JOIN TableOne t
           ON ( t.id = i.id )
    

    或使用集合和表集合表达式:

    select i.COLUMN_VALUE AS ID,
           COALESCE( TO_CHAR(Qty), 'Not Found' ) AS Qty
    from   TABLE( SYS.ODCIVARCHAR2LIST( 'A', 'B', 'C' ) ) i
           LEFT OUTER JOIN
           TableOne t
           ON ( t.id = i.COLUMN_VALUE )
    

    【讨论】:

      【解决方案3】:

      如果这对你有用:

         select t2.ID, case when t2.QTY is NULL then TO_CHAR('Not found') else t2.QTY end "QTY" from TableOnet1 t1 right join Tabletwo t2
      on t1.ID = t2.ID where t2.ID in ('A', 'B', 'C')
      

      【讨论】:

      • 这个不行。它只能显示前三行,因为表中有 ID = A 和 ID = B
      • 是的...需要为此添加左连接或右连接。你没有提到你有两张桌子。更新我的回答。
      • 只有一张表,TableOne。在该表中,ID 列有 A、B、D、E、F、...、Z。除了 C。但是如果我尝试查询 ID = 的 Qty 数据,我希望结果告诉我没有 C C.
      猜你喜欢
      • 1970-01-01
      • 2020-06-11
      • 2021-12-29
      • 1970-01-01
      • 2016-03-02
      • 2017-06-17
      • 2016-01-17
      相关资源
      最近更新 更多