COALESCE没有按预期工作

时间:2014-08-05 07:54:06

标签: sql-server-ce coalesce

我有以下查询:

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

我的错误在哪里?

1 个答案:

答案 0 :(得分: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)