复制每一行,并在给定的开始和结束日期之间添加一天额外的字段

时间:2014-01-04 16:19:42

标签: ms-access ms-access-2007 ms-access-2010

我正在使用Microsoft Access,并且我想创建一个查询,该查询复制从表中提取的每一行,并在给定的开始日期和结束日期之间的一天内计算一个额外的字段。

因此,如果在开始日期和结束日期之间有4天,则每条记录返回4个重复行,唯一的区别是添加日期字段,计算1天。

这实际上可以吗?

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;