Oracle为null或empry时选择许多列

问题描述 投票:0回答:2

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

我的意思是,像这样的东西

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列

enter image description here

sql oracle select case case-when
2个回答
0
投票

这样的事情?

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>

0
投票

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

为了获得具有NULL名,NULL第二名或NULL num的用户,您可以运行以下查询:

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 
STATUS
    FROM USER
    WHERE 
    NAME IS NULL 
    OR SECON_NAME IS NULL
    OR USER_NUM IS NULL
© www.soinside.com 2019 - 2024. All rights reserved.