2013-04-13 72 views
1

我想写一个SQL查询来显示每个类别的总和。 问题是我需要每个类别的总和,即使总和为零,它仍应显示结果。检查并显示MS Access查询中的空值

我正在通过使用DAL层来做到这一点,所以通过C#和我正在使用访问2010数据库。

这是我目前工作的查询:

SELECT  SUM(f.bedrag) AS totaal, c.omschrijving, Limiet.maximumBedrag 
FROM   ((Financien f INNER JOIN 
         Categorie c ON f.categorieId = c.id) INNER JOIN 
         Limiet ON f.limietId = Limiet.id) 
WHERE  (f.inkomstOfUitgave = 1) 
GROUP BY f.categorieId, c.omschrijving, Limiet.maximumBedrag 

现在的SUM函数的顶部我还需要检查空值,如果一个类别的总和为0它应该显示0中的全部结果现在被过滤掉了,但我必须看到它们。

有人知道如何解决它吗?我试过IsNull()NZ,但我无法工作。 以下是查询结果的屏幕截图。你可以看到我得到两个结果,但如果查询将显示总和为0的结果,我应该得到7。

任何人都知道如何解决这个问题?

回答

0

同样显示0值的答案是: 答案是由“drch”做出的,我非常感谢他! :)

SUM(IIF(IsNULL(f.bedrag), 0, f.bedrag)) AS bedrag 

还有那里有很多其他的事情太多错误,这是完整的查询:

SELECT  c.omschrijving as Omschrijving, SUM(IIF(IsNULL(f.bedrag), 0, f.bedrag)) AS bedrag, l.maximumBedrag as maximumBedrag 
FROM   ((Categorie c LEFT OUTER JOIN 
         Financien f ON f.categorieId = c.id) LEFT OUTER JOIN 
         Limiet l ON l.categorieId = c.id) 
WHERE  (f.inkomstOfUitgave IS NULL) OR 
         (f.inkomstOfUitgave = 1) 
GROUP BY c.id, f.categorieId, c.omschrijving, l.maximumBedrag 
1

如果问题是关于如何在Access查询中显示Null为0,请考虑这个简单的查询。它在SumOfbedrag列中返回一些空值的行。

SELECT y.categorieId, Sum(y.bedrag) AS SumOfbedrag 
FROM YourTable AS y 
GROUP BY y.categorieId 

使用SQL为子查询,含查询可以转化空至0与IIf()表达。

SELECT 
    sub.categorieId, 
    IIf(sub.SumOfbedrag Is Null, 0, sub.SumOfbedrag) AS totaal 
FROM 
    (
     SELECT y.categorieId, Sum(y.bedrag) AS SumOfbedrag 
     FROM YourTable AS y 
     GROUP BY y.categorieId 
    ) AS sub; 

然而,在你的截图再次寻找让我觉得这个问题实际上是你的查询不包括在totaal柱空行。在这种情况下,请在与GROUP BY合并之前检查基础数据。看到这个查询是否返回任何行...

SELECT f.bedrag, c.omschrijving, Limiet.maximumBedrag 
FROM 
    (Financien f 
    INNER JOIN Categorie c 
    ON f.categorieId = c.id) 
    INNER JOIN Limiet 
    ON f.limietId = Limiet.id 
WHERE 
     f.inkomstOfUitgave = 1 
    AND f.bedrag Is Null 

如果查询返回任何行,我最好的猜测是,你的一个或两个连接应INNER改为LEFT JOINRIGHT JOIN

+1

是啊,我在想“左/右JOIN”了。 –

+0

首先,子查询不起作用,因为“IS”不被程序支持:( 其次,如果我运行最后一个查询,我确实得不到任何结果!所以我相信我需要一个左或右连接然后? 在这张图片你可以看到我使用的三个表的数据库结构,你能告诉我如何编码连接吗?我不断收到错误:/是的事实上,所有的东西给0作为总和应显示:)我需要其他数据的其他东西! Access中的表格结构:http://i.imgur.com/MWs4hm8。png – Yenthe

+0

*“首先,子查询不起作用,因为”IS“不被程序支持”*我创建了一个表,然后在Access 2007中创建并测试了该查询,然后将SQL文本和将其粘贴到答案中。它是有效的访问SQL – HansUp