sql添加2个查询返回NULL

时间:2014-04-22 09:06:31

标签: sql

我想添加两个查询的总和(请参阅下面的查询,这些示例有效)。我的问题是当其中一个查询返回一个null结果,如

select (select sum(60+3+25+2))+(select sum(0)) as montant

添加的结果自动为NULL 但是当2个查询的结果大于null时,如:

select (select sum(60+3+25+2))+(select sum(300+50)) as montant

添加有效,我得到了正确的结果:

这是第一个给我90作为结果的查询

select sum(lf.quantite) from fraisforfait f  
        inner join lignefraisforfait lf on lf.idFraisForfait = f.id 
        inner join fichefrais ff on ff.idVisiteur = lf.idVisiteur and ff.mois = lf.mois 
        where lf.idVisiteur = "a131" and lf.mois = "201312"

这是第二个给我0的结果

select sum(lfh.montant) 
        from lignefraishorsforfait lfh 
        inner join fichefrais ff on ff.idVisiteur = lfh.idVisiteur and ff.mois = lfh.mois 
        where ff.idVisiteur = "a131" and ff.mois = "201312"

这里添加了2个查询,这些查询给出了一个NULL结果,但我希望90:

 select (select sum(lf.quantite) from fraisforfait f  
        inner join lignefraisforfait lf on lf.idFraisForfait = f.id 
        inner join fichefrais ff on ff.idVisiteur = lf.idVisiteur and ff.mois = lf.mois 
        where lf.idVisiteur = "a131" and lf.mois = "201401") + (select sum(lfh.montant) 
        from lignefraishorsforfait lfh 
        inner join fichefrais ff on ff.idVisiteur = lfh.idVisiteur and ff.mois = lfh.mois 
        where ff.idVisiteur = "a131" and ff.mois = "201401") as montantValide;  

有没有人能解决这个问题?谢谢你的时间。

4 个答案:

答案 0 :(得分:0)

您需要添加能够将NULL转换为0的内容。

select COALESCE(sum(lfh.montant), 0)

答案 1 :(得分:0)

你想要这样的东西。

T-SQL

select (select 1 value) + isnull((select null value),0);

MySQL的

select (select 1 value) + ifnull((select null value),0);

答案 2 :(得分:0)

你可以像这样写

select isnull((select isnull(sum(60+3+25+2),0))+(select isnull(sum(0),0)),0) 
as montant

答案 3 :(得分:0)

你可以在sum函数中使用 ISNULL 函数,就像这样

select Sum(ISNULL(value,0)) as result

所以如果值为null,则返回secend参数,sum函数将返回正确的结果