根据条件显示查询结果

时间:2020-05-12 18:47:36

标签: sql oracle conditional-statements

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

having sum( . . . ) <> X

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

答案 1 :(得分:1)

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>