修改查询以供查看

Posted

技术标签:

【中文标题】修改查询以供查看【英文标题】:Modifying the query for view 【发布时间】:2014-02-11 06:30:40 【问题描述】:

我们的一个视图曾经返回单行和单个值,它曾经是TRUEFALSE。由于相关表中的某些数据发生变化,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。” 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

只返回第一行:

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

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

【讨论】:

以上是关于修改查询以供查看的主要内容,如果未能解决你的问题,请参考以下文章

PHP Mysql PDO查询来自foreach存储的多个值以供输出

Django:保存旧的查询集以供将来比较

存储结果集以供以后获取

将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询

Elasticsearch——创建/查看/删除索引创建/查看/修改/删除文档映射关系

Elasticsearch——创建/查看/删除索引创建/查看/修改/删除文档映射关系