我正在使用Microsoft Access,并且我想创建一个查询,该查询复制从表中提取的每一行,并在给定的开始日期和结束日期之间的一天内计算一个额外的字段。
因此,如果在开始日期和结束日期之间有4天,则每条记录返回4个重复行,唯一的区别是添加日期字段,计算1天。
这实际上可以吗?
答案 0 :(得分:1)
如果您有一个日历表,其中包含您需要的每个日期的行,则此任务非常简单。 (有关日历表有用的其他原因,请参阅this Stack Overflow answer。)如果没有这样的表,此任务对Access SQL不可行。
在 YourTable 中使用我的calendar table和此示例数据......
fld1 start_date end_date
---- ---------- ----------
a 12/26/2013 12/26/2013
b 12/27/2014 12/28/2014
c 1/1/2014 1/3/2014
d 1/4/2014 1/1/2014
...下面的查询给了我这个输出。
fld1 start_date end_date added_date
---- ---------- ---------- ----------
a 12/26/2013 12/26/2013 12/26/2013
b 12/27/2014 12/28/2014 12/27/2014
b 12/27/2014 12/28/2014 12/28/2014
c 1/1/2014 1/3/2014 1/1/2014
c 1/1/2014 1/3/2014 1/2/2014
c 1/1/2014 1/3/2014 1/3/2014
请注意“d”行未包含在输出中,因为end_date
早于该行中的start_date
。您可以包含表级验证规则,以强制执行每行start_date
< = end_date
的要求。
SELECT
y.fld1,
y.start_date,
y.end_date,
c.the_date AS added_date
FROM
tblCalendar AS c
INNER JOIN YourTable AS y
ON
c.the_date >= y.start_date
AND c.the_date <= y.end_date
ORDER BY
y.fld1,
c.the_date;