Sql 修改视图的查询

Sql 修改视图的查询,sql,view,oracle11g,Sql,View,Oracle11g,我们的一个视图用于返回一行和一个值,该值过去是TRUE或FALSE。由于相关表中的某些数据更改,WHERE子句中的条件与以前相同,现在我们从系统返回两行 让我们假设下面的表,test现在有两个值 COLUMN ------ TRUE FALSE 我可以编写一个CASE语句来检查从当前视图返回的记录数,方法是将视图的整个代码封装在一个内部查询中,比如 SELECT CASE WHEN count(a.val) > 1 THEN 'TRUE'

我们的一个视图用于返回一行和一个值,该值过去是
TRUE
FALSE
。由于相关表中的某些数据更改,WHERE子句中的条件与以前相同,现在我们从系统返回两行

让我们假设下面的表,test现在有两个值

COLUMN
------
TRUE
FALSE
我可以编写一个CASE语句来检查从当前视图返回的记录数,方法是将视图的整个代码封装在一个内部查询中,比如

SELECT CASE 
          WHEN count(a.val) > 1
             THEN 'TRUE'

          ELSE a.val
       END
FROM (
SELECT val FROM test) a;
我不能做的是,如何检查由内部查询返回的记录-我需要抑制这两个记录,并且只返回一个记录,因为如果我得到的是TRUE和FALSE作为输出,我应该只返回TRUE。如果我得到的两个记录都是TRUE或FALSe,我应该分别返回TRUE/FALSe


如何在视图中完成此操作?

只返回第一行:

ELECT CASE 
          WHEN count(a.val) > 1
             THEN 'TRUE'

          ELSE a.val
       END
FROM (
SELECT val FROM test where rownum = 1) a;

将布尔值强制转换为int并使用max:

select max(cast(mybool as INT)) from MyView

将布尔值转换为int并使用maxThreak@Evgeni。这很简洁,可以达到目的。如果你能把它作为答案贴出来,我会接受的!内部查询中的Distinct应该可以帮助您避免“我得到的两条记录都是TRUE或FALSe,我应该分别返回TRUE/FALSe。”