SQL Oracle:将空结果替换为word
这个问题我已经研究了好几天了。我有一个oracle数据库。 这个问题必须在一次查询中解决。没有功能,程序。。。 我想做一个选择。当他有结果的时候,把它们贴出来。否则应该有空的结果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
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