SQL Oracle:将空结果替换为word

SQL Oracle:将空结果替换为word,sql,oracle,select,case,Sql,Oracle,Select,Case,这个问题我已经研究了好几天了。我有一个oracle数据库。 这个问题必须在一次查询中解决。没有功能,程序。。。 我想做一个选择。当他有结果的时候,把它们贴出来。否则应该有空的结果 select case when count(*) = 0 then 'no Entry' else MAX(Member)--all Members should be here END as Member from tableMember where Membergroup = 'testgr

这个问题我已经研究了好几天了。我有一个oracle数据库。 这个问题必须在一次查询中解决。没有功能,程序。。。 我想做一个选择。当他有结果的时候,把它们贴出来。否则应该有空的结果

select case 
when count(*) = 0    
then 'no Entry'   
else MAX(Member)--all Members should be here 
END as Member 
from tableMember 
where Membergroup = 'testgroup'; 
问题是Oracle希望else提供一个Agregat函数。因此,如果结果不是no entry,我只得到一个值。我需要所有的价值观


欢迎所有能帮助我的人,让我高兴

不需要两个聚合查询,只需检查maxmember是否为null。我这样做是为了弄清楚到底发生了什么

select case when max_member is null then 'no entry' else max_member end as member
  from ( select max(member) as max_member
           from tablemember
          where membergroup = 'testgroup'
                )
但是,如果要返回所有成员,可以执行以下操作:

select member
  from tablemember
 where membergroup = 'testgroup'
 union all
select 'no entry'
  from dual
 where not exists ( select 1 from tablemember where membergroup = 'testgroup')

不确定你想要达到什么,也许是这个

 select member from tablemember where Membergroup = 'testgroup'
union 
 select  'no Entry' 
 from dual 
 where NOT EXISTS ( select member from tablemember where membergroup = 'testgroup')
;
试试这个:

DECLARE C INTEGER;

SELECT COUNT(*) INTO C FROM tableMember WHERE Membergroup = 'testgroup';

IF C > 0

THEN

    SELECT * FROM tableMember;

ELSE

    SELECT 'No results!' FROM tableMember;

END IF;
如果将查询与空集的查询右键联接,则始终会得到一行,如果查询返回数据,则会得到所有行。这比不存在的UNION或UNION ALL更快,因为它不需要对数据进行多次扫描

SELECT nvl(a.member,b.member) member
   FROM (SELECT member FROM tablemember WHERE membergroup='????') a
   RIGHT JOIN (SELECT 'no Entry' member FROM dual) b ON 1=1;
测试环境:


您可以使用一些聚合函数和NVL来实现您的目标:

从DUAL中选择最小“值1”作为p1,最小“值2”作为p2,其中1=0

此查询的结果是: 空,空

接下来,用所需字符串替换空值:

SELECT 
    NVL(MIN('1'), 'empty  value 1') AS p1, 
    NVL(MIN('STRING VALUE'), 'empty value 2')  AS p2,
    NVL(MIN((select 'subquery result' from dual)), 'empty subquery result') as p3
FROM 
    DUAL 
WHERE 
    1=0

但是,不能在字段中混合使用数字和字符串。

查询的预期输出是什么?请举一个例子。你说:当他有结果时,把它们贴出来。这些结果是否有多个列?如果是这样的话,你的要求是不可能的。查询总是返回一定数量的列。这些不能根据查询本身的某些条件进行更改。您好,您可以通过突出显示代码的相关部分并单击{}来使用代码格式。OP特别要求使用SQL而不是PL/SQL。此外,您的代码不会编译或显示任何内容。它不会向客户返回任何东西。代码的第二部分不是Oracle语法。
SELECT 
    NVL(MIN('1'), 'empty  value 1') AS p1, 
    NVL(MIN('STRING VALUE'), 'empty value 2')  AS p2,
    NVL(MIN((select 'subquery result' from dual)), 'empty subquery result') as p3
FROM 
    DUAL 
WHERE 
    1=0