0

我有一张详细说明项目时间表的表格。

ProjectID | StartMonth | EndMonth
---------------------------------
1           2            5
2           3            8
3           6            10

我想运行一个查询来为每个项目中的每个月生成一行。例如,ProjectID = 1,需要第 2 个月到第 5 个月的行。

ProjectID | Month
-----------------
1           2
1           3
1           4
1           5
2           3
2           4
2           5
2           6
2           7
2           8
3           6
3           7
3           8
3           9
3           10

我正在使用 Access,但为了 StackOverflow 社区的利益,我想构建一个与平台无关的解决方案。

想到的唯一技术是双for循环,它将行与最内层循环中的每次迭代联合在一起。

有什么想法吗?

更新/澄清

StartMonth 和 EndMonth 是相对于儒略日期的整数值。例如,一个条目可能是:

ProjectID | StartMonth | EndMonth
---------------------------------
10          2            236

这意味着系统从开始的第 2 个月到第 236 个月一直在监控项目。它仅记录第 2 个月至第 236 个月之间发生的事件。

尽管有好几个月没有发生任何事件,也没有发生任何事情。PM 希望有一个表,该表包含所有月份的行,并且在系统中没有记录任何活动的月份都为零。

4

1 回答 1

4

创建一个名为 Months 的表,在 Month 字段中使用数字 1-12。那么这是您的查询

SELECT  p.ProjectID
       ,m.Month
FROM   Months m
       INNER JOIN
       Projects p ON p.StartMonth<=m.Month AND p.EndMonth>=m.Month

这种技术非常有用并且经常出现,以至于我有一个名为 IndexTable 的表,其中包含从 0 到 1,000,000 的整数。

顺便说一句 - 在我看来,你不会有任何跨越一年以上的项目。

于 2012-12-14T00:30:11.913 回答