Фильтрация данных по дате, но отображение всех значений, кроме одного в запросе, если дата не совпадает [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