修改查询以供查看
Posted
技术标签:
【中文标题】修改查询以供查看【英文标题】:Modifying the query for view 【发布时间】: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。” 【参考方案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存储的多个值以供输出
将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询