【问题标题】:COALESCE not working as intendedCOALESCE 未按预期工作
【发布时间】:2014-08-05 07:54:05
【问题描述】:

我有以下疑问:

SELECT SUM(trns_master.trns_advance) FROM trns_master
WHERE trns_company = 1 AND 
(trns_rentTrnsptr = 12 OR  trns_othersTrnsptr = 12)

以上查询返回金额:假设为10000

然后我有第二个查询:

SELECT SUM(txn_credit) FROM txn_master
WHERE txn_fromLedId = 1 AND txn_fromLedId = 12

因为没有匹配的行,所以返回一个空值。

现在我想要的是从上述两个查询返回的值的总和

为此我使用 COALESCE 函数如下:

SELECT COALESCE(SUM(trns_master.trns_advance), 0) + COALESCE(SUM(txn_master.txn_credit), 0)
FROM trns_master, txn_master WHERE  
trns_master.trns_company = 1 AND 
txn_master.txn_fromLedId = 1 AND  
txn_master.txn_toLedId = 12 AND 
(trns_rentTrnsptr = 12 OR  trns_othersTrnsptr = 12)

所以从我可以从 COALESCE 定义中了解到,该函数返回第一个 NON-NULL 值,

COALESCE(SUM(trns_master.trns_advance), 0) 应该返回 10000COALESCE(SUM(txn_master.txn_credit), 0) 应该返回 0,因为 SUM(txn_master.txn_credit)null

但最终结果是0

我的错误在哪里?

【问题讨论】:

    标签: sql-server-ce coalesce


    【解决方案1】:

    我相信 COALESCE 部分实际上很好,我目前无法访问 SQL 来检查。如果输出不符合预期,请将函数替换为预期的输出值。

    SELECT COALESCE(10000,0) + COALESCE(NULL,0)
    

    这应该返回 10000 作为值。 因此,以下内容应该可以满足您的期望:

    SELECT COALESCE(
        (SELECT SUM(trns_master.trns_advance)
        FROM trns_master
        WHERE trns_company = 1 AND 
        (trns_rentTrnsptr = 12 OR  trns_othersTrnsptr = 12))
    ,0)
    +
    COALESCE(
        (SELECT SUM(txn_credit) FROM txn_master
        WHERE txn_fromLedId = 1 AND txn_fromLedId = 12)
    ,0)
    

    【讨论】:

    • 是的,我猜连接结果为 0 行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2022-01-24
    • 2015-05-11
    • 2020-05-15
    • 2014-10-31
    • 2018-02-12
    • 2014-01-20
    • 2015-01-13
    相关资源
    最近更新 更多