0

プロジェクト スケジュールの詳細を示す表があります。

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

クエリを実行して、各プロジェクトの月ごとに 1 つの行を生成したいと考えています。たとえば、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

Month フィールドに 1 ~ 12 の数字を含む Months というテーブルを作成します。次に、これはあなたのクエリです

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

この手法は非常に便利で、頻繁に登場するので、0 から 1,000,000 までの整数を持つ IndexTable というテーブルがあります。

ところで、あなたが 1 年以上にわたるプロジェクトを持っていないというのは、私には珍しいことのように思えます。

于 2012-12-14T00:30:11.913 に答える