【问题标题】:Oracle select many columns when are null or empryOracle 在为空或为空时选择许多列
【发布时间】:2020-07-07 11:58:13
【问题描述】:

当一个或多个列为空时,我试图从表中获取用户

我的意思是,像这样的

SELECT ID_USER,
    CASE
        WHEN NAME IS NULL
          THEN 'HAS NO NAME'
        WHEN SECON_NAME IS NULL
          THEN 'HAS NO SECOND'
        WHEN USER_NUM IS NULL
          THEN 'HAS NO NUM'
    END AS STATUS
FROM USER

这可能吗? 还是有其他方法可以获取?

目前我只能得到 second_name 列

【问题讨论】:

  • 你想要什么结果?
  • 你能分享示例输入数据吗?

标签: sql oracle select case case-when


【解决方案1】:

这样的?

SQL> with users (id, name, second_name, user_num) as
  2    (select 1, 'Little', 'Foot', '100' from dual union all -- has all
  3     select 2, 'Scott' , null  , '200' from dual union all -- no second
  4     select 3, null    , 'Mike', '300' from dual union all -- no first
  5     select 4, null    , null  , '400' from dual           -- no first, no second
  6    )
  7  select id,
  8    trim(both '-' from
  9    decode(name, null, 'No first') ||'-'||
 10    decode(second_name, null, 'No second') || '-'||
 11    decode(user_num, null, 'No num')) msg
 12  from users;

        ID MSG
---------- -------------------------
         1
         2 No second
         3 No first
         4 No first-No second

SQL>

【讨论】:

    【解决方案2】:

    CASE 表达式在第一个计算结果为 TRUE 的表达式之后退出。所以即使你有多个条件,你也只会得到其中一个。

    为了获取具有 NULL 名称、NULL 第二个名称或 NULL 编号的用户,您可以运行以下查询:

    SELECT ID_USER 
    FROM USER
    WHERE 
    NAME IS NULL 
    OR SECON_NAME IS NULL
    OR USER_NUM IS NULL
    

    如果你想知道他们被退回的原因,你可以使用

        SELECT ID_USER,
     CASE WHEN NAME IS NULL THEN 'HAS NO NAME ' else '' end
    || CASE WHEN SECON_NAME IS NULL THEN 'HAS NO SECOND ' else '' end
    || CASE WHEN USER_NUM IS NULL THEN 'HAS NO NUM' else '' end 
    as STATUS
        FROM USER
        WHERE 
        NAME IS NULL 
        OR SECON_NAME IS NULL
        OR USER_NUM IS NULL
    

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2021-03-27
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      相关资源
      最近更新 更多