我们的一个视图用于返回单行和单个值,过去曾是TRUE
或FALSE
。由于相关表中的某些数据更改,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。
如何在视图中完成此操作?
答案 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;