ORACLE,忽略null求和
ORACLE, ignore null to sum
我想将一行的两列(数字类型)加在一起,但是当其中一列为空时,结果为空。我通过 NVL 函数 (NVL(col1,0) + NVL(col2,0)) 处理了它。但是当两者都为空(而不是 0)时,我想 return 为空。
我该如何处理?
ORACLE中有忽略空值求和一行两列的函数吗?
| col1 | col2 | |
|:---- |:-----:|:-----------------------------------:|
| 1 | 2 | --> result have to be : 3 |
| 1 | null | --> result have to be : 1 |
| null | null | --> result have to be : null |
CASE
表达式可能是最简单的方法:
SELECT CASE WHEN col1 IS NULL AND col2 IS NULL
THEN NULL
ELSE NVL(col1, 0) + NVL(col2, 0) END AS output
FROM yourTable;
coalesce(col1+col2,col1,col2)
会更容易:
with t(col1,col2) as (
select 0,1 from dual union all
select 2,null from dual union all
select null,3 from dual union all
select null,null from dual
)
select
col1,col2,
coalesce(col1+col2,col1,col2) sum_cols
from t;
结果:
COL1 COL2 SUM_COLS
---------- ---------- ----------
0 1 1
2 null 2
null 3 3
null null null
4 rows selected.
如果要求和的列更多,则使用求和子查询:
(select sum(column_value) from table(sys.odcinumberlist(col1,col2,...,colN)))
示例:
with t(col1,col2) as (
select 0,1 from dual union all
select 2,null from dual union all
select null,3 from dual union all
select null,null from dual
)
select
col1,col2,
coalesce(col1+col2,col1,col2) sum_cols,
(select sum(column_value) from table(sys.odcinumberlist(col1,col2))) sum_cols2
from t;
DBFiddle:
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=eda8de9746f1d0def3c290420adbb705
我想将一行的两列(数字类型)加在一起,但是当其中一列为空时,结果为空。我通过 NVL 函数 (NVL(col1,0) + NVL(col2,0)) 处理了它。但是当两者都为空(而不是 0)时,我想 return 为空。 我该如何处理? ORACLE中有忽略空值求和一行两列的函数吗?
| col1 | col2 | |
|:---- |:-----:|:-----------------------------------:|
| 1 | 2 | --> result have to be : 3 |
| 1 | null | --> result have to be : 1 |
| null | null | --> result have to be : null |
CASE
表达式可能是最简单的方法:
SELECT CASE WHEN col1 IS NULL AND col2 IS NULL
THEN NULL
ELSE NVL(col1, 0) + NVL(col2, 0) END AS output
FROM yourTable;
coalesce(col1+col2,col1,col2)
会更容易:
with t(col1,col2) as (
select 0,1 from dual union all
select 2,null from dual union all
select null,3 from dual union all
select null,null from dual
)
select
col1,col2,
coalesce(col1+col2,col1,col2) sum_cols
from t;
结果:
COL1 COL2 SUM_COLS
---------- ---------- ----------
0 1 1
2 null 2
null 3 3
null null null
4 rows selected.
如果要求和的列更多,则使用求和子查询:
(select sum(column_value) from table(sys.odcinumberlist(col1,col2,...,colN)))
示例:
with t(col1,col2) as (
select 0,1 from dual union all
select 2,null from dual union all
select null,3 from dual union all
select null,null from dual
)
select
col1,col2,
coalesce(col1+col2,col1,col2) sum_cols,
(select sum(column_value) from table(sys.odcinumberlist(col1,col2))) sum_cols2
from t;
DBFiddle: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=eda8de9746f1d0def3c290420adbb705