我有一个相当复杂的选择查询,包含两种类型的SUM表达式.简单SUM:
SUM(X)
Run Code Online (Sandbox Code Playgroud)
更复杂的SUM/CASE:
SUM(CASE WHEN TYPE IN (
'ORANGES',
'LEMONS',
'LIMES')
THEN X
ELSE 0 END) AS SUM_CITRUS
Run Code Online (Sandbox Code Playgroud)
现在,问题在于:只有当所有求和的值都为空时,我才需要将这两个SUMS评估为NULL .如果求和的任何一个值是一个值,则需要返回总和,就好像所有空值都替换为0一样.
对于所示的案例,如何实现这一目标?我的关注点是效率和简单性.
只有当求和的所有值都为空时,我才需要将这两个SUMS评估为NULL.
它将默认.只需更换0与null您的ELSE条件.
09:43:30 SYSTEM@dwal> ed
Wrote file S:\spool\dwal\BUFFER_SYSTEM_65.sql
1 with t (x, y) as (
2 select null, 1 from dual union all
3 select null, 1 from dual union all
4 select null, 2 from dual
5 )
6* select sum(x), sum(case y when 1 then x else null end ) from t
09:43:40 SYSTEM@dwal> /
SUM(X) SUM(CASEYWHEN1THENXELSENULLEND)
---------- -------------------------------
Elapsed: 00:00:00.00
09:43:41 SYSTEM@dwal> 2
2* select null, 1 from dual union all
09:43:59 SYSTEM@dwal> c/null/1
2* select 1, 1 from dual union all
09:44:03 SYSTEM@dwal> /
SUM(X) SUM(CASEYWHEN1THENXELSENULLEND)
---------- -------------------------------
1 1
Elapsed: 00:00:00.01
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |