2013-04-13 2 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. Всех результатов, 0 теперь отфильтрованы, но я должен их видеть.

Кто-нибудь знает, как это исправить? Я пробовал IsNull() и NZ, но я не мог заставить его работать. Вот скриншот результата запроса.

Как вы можете видеть, я получаю два результата, но я должен получить 7, если запрос будет отображать результаты суммы 0.

Кто-нибудь знает, как это исправить?

ответ

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

Если вопрос о том, как отобразить Null как 0 в запросе Access, рассмотрите этот простой запрос. Он возвращает несколько строк с Null в столбце 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; 

Однако, глядя на скриншоте снова заставляет меня думать, что проблема на самом деле, что ваш запрос не содержит строки с Null в 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 JOIN или RIGHT JOIN.

+1

Да, я думал, "LEFT/RIGHT JOIN" тоже. –

+0

Прежде всего, подзапрос не работает, так как «IS» не поддерживается программой :( Во-вторых, если я запустил ваш последний запрос, я действительно получил НИЧЕГО в результате! Поэтому я считаю, что мне понадобится слева или справа? На этом изображении вы можете увидеть мою структуру db для трех таблиц, которые я использую, не могли бы вы рассказать мне, как закодировать соединение? Я продолжаю получать ошибки:/И да, фактически, все, что дает 0 так как сумма должна отображаться :) Мне нужны другие данные для чего-то еще! Структура таблицы в Access: http://i.imgur.com/MWs4hm8.png – Yenthe

+0

* «Прежде всего, подзапрос не работает, поскольку« IS »не поддерживается программой» * Я создал таблицу, затем создал и протестировал этот запрос в Access 2007, а затем скопировал текст SQL и вставил его в ответ. Он доступен. Доступ к SQL – HansUp

Смежные вопросы