首页 > 解决方案 > 如果第二个选择为空,如何忽略?

问题描述

我的目标是计算账户突变(Credit - Debit)

这是我当前的 SQL 语句:

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Source=99005571818061833)

预期结果是: 返回账户突变值。

实际结果是: null

问题是如果第 4 行没有找到行,无论第 2 行是否返回值,它都会返回 null。

例如,如果我们对这个表数据运行 SQL 语句:

ID  Date        Source              Destination         Transaction_Value
168 2020-11-24  SETORAN TUNAI       99005571818061833   1000000.0000
169 2020-11-24  98993563492155716   98993563492155717   1000.0000

返回值将为空,因为 SQL 语句没有找到 Source === "99005571818061833" 的行

标签: mysqlsql

解决方案


我是 SQL 新手。这绝不是有效的,如果您有更有效的方法和解释的答案,请随时回答。我会将其标记为答案。

答案:

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
IFNULL((SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN 2020-11-01 AND 2020-11-30 AND Source=99005571818061833), 0)

说明:

事实证明,如果你用 null 减去一个数字,返回值将为 null。

例如

SELECT
(SELECT sum(Transaction_Value) FROM transactions WHERE Date BETWEEN "2020-11-01" AND "2020-11-30" AND Destination=99005571818061833)
-
null

预期结果将为空。

所以...从逻辑上讲,如果您的第 4 行返回 null,则应将其更改为 0。


推荐阅读