修改查询查询

时间:2014-02-11 06:30:41

标签: sql view oracle11g

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

我们假设基础表测试目前有两个值。

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。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

只返回第一行:

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

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