【问题标题】: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 中实现吗?如果是,我会怎么做?
【问题讨论】:
标签:
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>