我一直在寻找一个解决方案,现在看到一些其他主题,但我无法解决我的问题。
我有一个表“数据”,其中包含特定日期范围的值:
|Arrival Date | Departure Date | Volume
| 01/01/2017 | 04/01/2017 | 6
我想得到以下结果:
| CalendarDate | Volume
| 01/01/2017 | 2
| 02/01/2017 | 2
| 03/01/2017 | 2
| 04/01/2017 | 0
我创建了一个日历,其中包含我在查询中使用的各个日期。然后我尝试使用我在网上找到的内容进行以下查询,但此查询的结果始终为空:
SELECT
Dates.CalendarDate,
Sum([Volume]/DateDiff("d",[Arr Date],[Dep Date])) AS Vol,
Data.[Arr Date],
Data.[Dep Date]
FROM Dates
LEFT JOIN Data
ON (Dates.CalendarDate = Data.[Arr Date])
AND (Dates.CalendarDate = Data.[Dep Date])
GROUP BY
Dates.CalendarDate,
Data.[Arr Date],
Data.[Dep Date]
HAVING
(((Dates.CalendarDate)>=[Data].[Arr Date]
And (Dates.CalendarDate)<[Data].[Dep Date]));
现在,如果我直接在SQL中将其更改为以下内容,它确实有效。我唯一的问题是,当我尝试回到设计模式时,Access表示此代码无法表示为设计模式,然后断开连接。但是,我需要通过设计模式完成此操作,以确保一些用户能够修改查询,即使他们对SQL没有任何了解。
SELECT
Dates.CalendarDate,
Sum([Volume]/DateDiff("d",[Arr Date],[Dep Date])) AS SommeDeNuitées,
Data.[Arr Date],
Data.[Dep Date]
FROM Dates
LEFT JOIN Data
ON (Dates.CalendarDate < Data.[Dep Date])
AND (Dates.CalendarDate >= Data.[Arr Date])
GROUP BY
Dates.CalendarDate,
Data.[Arr Date],
Data.[Dep Date];
有什么想法吗?
提前谢谢!
答案 0 :(得分:0)
尝试使用“where join”:
SELECT
Dates.CalendarDate,
Sum([Volume]/DateDiff("d",[Arr Date],[Dep Date])) AS SommeDeNuitées,
Data.[Arr Date],
Data.[Dep Date]
FROM Dates
WHERE
Dates.CalendarDate < Data.[Dep Date]
AND
Dates.CalendarDate >= Data.[Arr Date]
GROUP BY
Dates.CalendarDate,
Data.[Arr Date],
Data.[Dep Date];