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
。