访问查询 - 将日期范围转换为个人日期

时间:2017-01-25 17:22:19

标签: sql ms-access date-range

我一直在寻找一个解决方案,现在看到一些其他主题,但我无法解决我的问题。

我有一个表“数据”,其中包含特定日期范围的值:

|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];

有什么想法吗?

提前谢谢!

1 个答案:

答案 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];