【问题标题】:Split range of dates into individual records, keeping IDs将日期范围拆分为单独的记录,保留 ID
【发布时间】:2014-01-14 10:54:41
【问题描述】:

我正在使用一个 Access 2010 数据库,该数据库有一个表,其中包含员工要求关闭的日期范围内的关联名称,格式如下:

DateRanges

 Name--| StartDate | EndDate  
 Joe---| 12/20/13  | 12/22/13   
 Sue---| 12/24/13  | 12/26/13  
 Guy---| 12/30/13  | 01/02/14

我正在尝试进行查询,该查询将更改数据以使每个日期都有单独的记录,但同时也为每个记录保留适当的名称。像这样:

Separated

Name -- DatesOff  
Joe ----- 12/20/13   
Joe ----- 12/21/13   
Joe ----- 12/22/13   
Sue ----- 12/24/13   
Sue ----- 12/26/13   
Guy ----- 12/30/13   
................   
Guy ----- 01/02/13

我在这里看到了一些关于仅拆分日期范围但不附带员工姓名/ID 的不同示例。有任何想法吗?我愿意使用 SQL 或 VBA 来完成它。

【问题讨论】:

    标签: sql vba date ms-access-2010 range


    【解决方案1】:

    您可以创建一个包含每天的表格并将其加入您的 DateRanges 表格,如下所示:

    SELECT
       dr.Name,
       d.DateValue AS DatesOff
    FROM
       Days d
    INNER JOIN
       DateRanges dr
       ON (d.DateValue BETWEEN dr.StartDate AND dr.EndDate)
    

    【讨论】:

    • 这里是日期表select distinct convert(datetime,'2013-01-01') + number from master..spt_values where type = 'p' and convert(int,number) < 365
    • “包含每一天”是指一年中的每一天吗?...如果这就是您的意思,我有一个名为“AllDays”的表。您必须原谅我的 SQL 新手级别...我不确定您回复的“Days d”部分是什么意思。
    • 感谢合作,伙计们!我让它变得比它需要的复杂得多。简单总是最好的。
    • @AnalyzeThis 看看这些对你是否有用:CreateTable_calendar and LoadCalendar。使用您的示例表和我的日历表,Nicarus 的查询策略会返回您想要的内容。 (但盖伊在 2013 年的大部分时间里都休息了?)干得好,尼卡洛斯。 +1
    • 哈哈...是的,这应该是 01/02/14 的 EndDate。直到我在查询中收到 300 多条记录时才注意到...我会检查您已构建的日历。我已经建立了我的日历表格,但比较总是好的。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2013-11-09
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多