Oracle sumvalue和加法怎么可以为空

Oracle sumvalue和加法怎么可以为空,oracle,Oracle,如何对NULL值求和 例如: select sum(nvl(a,0) + nvl(b,0)) s, c from ( select 1 a, null b, 'A' c from dual union select null, null b , 'c' c from dual ) group by c 预期结果:当a为NULL时,b为NULL则sum(nvl(a,0)+nvl(b,0))为NULL。如何执行此操作?使用CASE语句检测a和B何时为NULL: Oracle 11g R2架

如何对
NULL
值求和

例如:

select sum(nvl(a,0) + nvl(b,0)) s,  c from 
(
select 1 a, null b, 'A' c from dual union 
select null, null b , 'c' c from dual
)
group by c

预期结果:当
a
NULL
时,
b
NULL
sum(nvl(a,0)+nvl(b,0))
NULL
。如何执行此操作?

使用
CASE
语句检测
a
B
何时为
NULL

Oracle 11g R2架构设置

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |
查询1

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |

使用
CASE
语句检测
a
B
何时为
NULL

Oracle 11g R2架构设置

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |
查询1

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |

CREATE TABLE sample_data ( a, b, c ) AS
SELECT 1, CAST( NULL AS NUMBER ), 'A' FROM DUAL UNION ALL
SELECT NULL, NULL, 'C' FROM DUAL
SELECT SUM(
         CASE
         WHEN a IS NULL AND b IS NULL
         THEN NULL
         ELSE nvl(a,0) + nvl(b,0)
         END
       ) AS s,
       c
FROM   sample_data
GROUP BY c
|      S | C |
|--------|---|
|      1 | A |
| (null) | C |
您可以尝试:

select Case when (sum(nvl(a,0) + nvl(b,0))) = 0 then null 
else sum(nvl(a,0) + nvl(b,0)) end s,  c 
from 
(
select 1 a, null b, 'A' c from dual union 
select null, null b , 'c' c from dual
)
group by c
您可以尝试:

select Case when (sum(nvl(a,0) + nvl(b,0))) = 0 then null 
else sum(nvl(a,0) + nvl(b,0)) end s,  c 
from 
(
select 1 a, null b, 'A' c from dual union 
select null, null b , 'c' c from dual
)
group by c

oracle还是sql server?请选择正确的标签。您的问题不清楚。请编辑它。sql-server是否相同?我要alloracle还是sql server?请选择正确的标签。您的问题不清楚。请编辑它。sql-server是否相同?我要求所有,但如果我有很多列,例如sum(a+b+c+d+…),那么很难判断何时?@ILoveYou否-只需包括所有术语:
如果a为NULL,b为NULL,c为NULL,c为NULL,d为NULL,则为NULL,否则为NVL(a,0)+NVL(b,0)+NVL c,0)+NVL d(d,0)END(a+b+c+d+…)很难区分什么时候?@ILoveYou不-只需包括所有术语:
如果a为空,b为空,c为空,d为空,则为空,否则NVL(a,0)+NVL(b,0)+NVL(c,0)+NVL(d,0)结束
如果某些值为0(而不是全部
)然后,即使存在已知值,输出也将为
NULL
。如果某些值为0(而不是所有
NULL
),则即使存在已知值,输出也将为
NULL