在MS Access Query中检查并显示空值

时间:2013-04-13 15:20:39

标签: c# sum ms-access-2010 isnull

我正在尝试编写一个SQL查询来显示每个类别的总和。 问题是我需要每个类别的总和,即使总和为零,它仍应显示结果。

我是通过使用DAL层来实现这一点的,所以通过C#我正在使用Access 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.现在所有0的结果都被过滤掉,但我必须看到它们。< / p>

有人知道如何修复它吗?我尝试了IsNull()NZ,但我无法让它发挥作用。 以下是查询结果的屏幕截图。

正如你所看到的,我得到两个结果,但是如果查询显示0和0的结果,我应该得到7。

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

使用该SQL作为子查询,包含的查询可以使用IIf()表达式将Null转换为0。

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列中包含Null的行。在这种情况下,在将其与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 :(得分: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