我有一个非常大的mysql调用,我不会因为它不是很重要而无法显示它。在需要修改之前工作正常的部分看起来像这样:
COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',
这将返回多个表中的所有apFunReq
值,无论是null还是已填充。工作得很好,没问题。
现在我们已经决定我们需要另一个表数据来加入这个过程,但是所需的数据不会全部放在这个新表的一列中,而是需要在5列中共同累加。所以我实现了这个:
COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq, (IFNULL(d10.reqFunding_01, 0) + IFNULL(d10.reqFunding_02, 0) + IFNULL(d10.reqFunding_03, 0) + IFNULL(d10.reqFunding_04, 0) + IFNULL(d10.reqFunding_05, 0)), d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',
现在这确实适用于结果中的新表行但它打破了以前返回的大部分时间。现在很多其他表值只返回0。
显然,我需要为d10中的数据返回null值为0,以便添加工作,但我希望其他表中的空值保持为null,并且我希望所有表的数据显然可以按预期工作。 / p>
我不确定我做错了什么才能获得理想的结果。有人可以帮我吗?
C
答案 0 :(得分:0)
解决此问题的简单方法是在添加所有NULLIF
ed值之后使用IFNULL
,如下所示:
COALESCE(d1.apFunReq, d2.apFunReq, d3.apFunReq, d4.apFunReq, d5.apFunReq, d6.apFunReq, d8.apFunReq,
NULLIF(IFNULL(d10.reqFunding_01, 0) + IFNULL(d10.reqFunding_02, 0) + IFNULL(d10.reqFunding_03, 0) + IFNULL(d10.reqFunding_04, 0) + IFNULL(d10.reqFunding_05, 0), 0),
d2old.apFunReq, d3old.apFunReq, d5old.apFunReq, '') AS 'Funding Required',
显然,如果0是有效的答案,这不起作用。