Фильтрация данных по дате, но отображение всех значений, кроме одного в запросе, если дата не совпадает [SQL & C#]

Я довольно застрял в этом запросе. Прежде всего, чего я хочу достичь? Я хочу выполнить внутреннее объединение трех таблиц (уже правильно) и отфильтровать данные в зависимости от даты в текущем месяце. Если дата не в текущем месяце, поле "bedrag" не должно быть заполнено и должно быть установлено в ноль. Я должен также видеть все из таблицы, но поле 'bedrag' не должно быть изменено.

Если дата соответствует текущему месяцу, она должна быть добавлена ​​в 'bedrag' (обратите внимание на группу, чтобы сделать это) и показать все тоже. Теперь мой запрос делает все правильно, КРОМЕ, если у вас есть данные не за этот месяц. Тогда записи будут потеряны / не будут показаны.

Дизайн стола: http://imgur.com/vhONCq1

Запрос:

SELECT        c.id, c.omschrijving, l.maximumBedrag, SUM(IIF(IsNULL(f.bedrag), 0, f.bedrag)) AS bedrag
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)  AND (format(f.datum, 'yyyy-mm-dd') > format(NOW(), 'yyyy-mm'))
GROUP BY c.id, f.categorieId, c.omschrijving, l.maximumBedrag

Обратите внимание: это НЕ обычный SQL, а разновидность, используемая в C# для получения данных из БД Access на уровень DAL и BLL.

Пример, где вы можете увидеть, какие сообщения с запросом и КАК он идет не так: http://imgur.com/V0N6Wbk

Может ли кто-нибудь сказать мне, как я могу получить все данные для показа, но без добавленной на них подстилки, если записи не за этот месяц?

Спасибо!

1 ответ

Может быть, перенести некоторые условия из WHERE в LEFT OUTER JOIN?

SELECT c.id, sum(isnull(f.bedrag, 0))
FROM @cat c
LEFT OUTER JOIN @fin f ON f.catid=c.id AND f.datum > getdate()
LEFT OUTER JOIN @lim l ON l.catid = c.id

Проверьте эту скрипту SQL

Другие вопросы по тегам