我的目标是计算帐户变异(贷方借方)。
这是我当前的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语句找不到源=== "99005571818061833“的行
发布于 2020-11-24 16:08:16
用户条件聚合如下:
SELECT sum(CASE WHEN Destination = 99005571818061833 THEN Transaction_Value
WHEN Source = 99005571818061833 THEN -Transaction_Value
ELSE 0
END)
FROM transactions
WHERE Date BETWEEN 2020-11-01' AND '2020-11-30' AND
99005571818061833 IN (Source, Destination)
发布于 2020-11-24 16:08:02
我对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
预期结果为null。
所以..。逻辑上,如果您的第4行返回null,则应该将其更改为0。
https://stackoverflow.com/questions/64990215
复制相似问题