1

すべてのカテゴリの合計を表示する SQL クエリを作成しようとしています。問題は、すべてのカテゴリの合計が必要であり、合計がゼロであっても結果を表示する必要があることです。

私は 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 関数に加えて、null もチェックする必要があります。カテゴリの合計が 0 の場合は 0 を表示する必要があります。0 の結果はすべて除外されていますが、表示する必要があります。

誰もそれを修正する方法を知っていますか? 試してみましたが、うまくIsNull()いきNZませんでした。これは、クエリの結果のスクリーンショットです。

ご覧のとおり、2 つの結果が得られますが、クエリが合計 0 の結果を表示する場合は 7 を取得する必要があります。

誰でもこれを修正する方法を知っていますか?

4

2 に答える 2

1

If the question is about how to display Null as 0 in an Access query, consider this simple query. It returns some rows with Null in the SumOfbedrag column.

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

Using that SQL as a subquery, the containing query can transform Null to 0 with an IIf() expression.

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;

However, looking at your screenshot again makes me think the issue is actually that your query does not include rows with Null in the totaal column. In that case, examine the underlying data before you aggregate it with GROUP BY. See whether this query returns any rows ...

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

If that query returns no rows, my best guess is that one or both of your joins should be changed from INNER to LEFT JOIN or RIGHT JOIN.

于 2013-04-13T15:44:18.820 に答える
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
于 2013-04-14T15:33:12.150 に答える