0

我很坚持这个查询。首先,我想实现什么?我想在三个表上进行内部连接(已经正确)并根据日期是否在当月过滤掉数据。如果日期不在当前月份,则不应填写“bedrag”字段,应将其设置为零。我还应该看到表格中的所有内容,但不应更改“bedrag”字段。

如果日期是从当月开始的,它应该添加到“bedrag”(注意 group by 这样做)并显示所有内容。现在我的查询做的一切都是正确的,除了当你有不是这个月的数据时。然后记录将丢失/不会显示。

表设计: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 DB 获取到 DAL 和 BLL 层的变体。

一个示例,您可以在其中查看查询的哪些消息以及它是如何出错的:http: //imgur.com/V0N6Wbk

如果记录不是来自本月的,谁能告诉我如何才能显示所有数据,但又不添加床单?

谢谢!

4

1 回答 1

0

也许将一些条件从WHEREto 移到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 Fiddle

于 2013-05-07T20:50:40.223 回答