【问题标题】: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。”

标签: sql view oracle11g


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多