【问题标题】:Display query results based on condition根据条件显示查询结果
【发布时间】:2020-08-28 18:17:18
【问题描述】:

更多的是一个概念问题。我有一个查询计算一些值的总和,并根据模板值 X 对其进行检查,例如:

SELECT
    SUM(...),
    X,
    SUM(...) - X AS delta
FROM
...

现在查询本身可以正常工作。问题是如果delta 变量不为零,我需要它只显示一些结果,这意味着计算的总和与模板X 之间存在差异。如果delta 为零,我需要它不显示任何内容。

这可以在 SQL 中实现吗?如果是,我会怎么做?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • @GordonLinoff 完成。感谢您的评论。

标签: sql oracle conditional-statements


【解决方案1】:

您有一个聚合查询。许多(如果不是大多数)数据库在 having 子句中支持列别名:

select . . .
from . . .
group by . . .
having delta <> 0;

对于那些不这样做的人,重复表达式可能是最简单的:

having sum( . . . ) <> X

您也可以将查询放入 CTE 或子查询中,然后在子查询上使用where

【讨论】:

    【解决方案2】:

    Oracle 不支持HAVING 子句中的列别名。所以在oracle中,你必须在HAVING子句中重复聚合。

    看这个:

    SQL> SELECT MAX(COL1) AS RES,
      2         COL2
      3    FROM (select 1 as col1, 1 as col2 from dual
      4          union all
      5          select 10 as col1, 2 as col2 from dual)
      6   GROUP BY COL2
      7  HAVING RES > 5;
    HAVING RES > 5
           *
    ERROR at line 7:
    ORA-00904: "RES": invalid identifier
    
    
    SQL> SELECT MAX(COL1) AS RES,
      2         COL2
      3    FROM (select 1 as col1, 1 as col2 from dual
      4          union all
      5          select 10 as col1, 2 as col2 from dual)
      6   GROUP BY COL2
      7  HAVING MAX(COL1) > 5;
    
           RES       COL2
    ---------- ----------
            10          2
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 2019-11-18
      • 2021-08-18
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多