【发布时间】:2014-02-11 06:30:40
【问题描述】:
我们的一个视图曾经返回单行和单个值,它曾经是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。
如何在视图中完成这项工作?
【问题讨论】:
-
将布尔值转换为 int 并使用 max
-
谢谢@Evgeni 这很整洁,可以达到目的。如果您可以将其发布为答案,我会接受!
-
内部查询的不同之处应该可以帮助您避免“我将两条记录都设为 TRUE 或都设为 FALSe,我应该分别返回 TRUE/FALSE。”