0

シナリオ:

表 1 (日付)

01/01/12
02/01/12

表 2 (カウント)

01/01/12 | Item 1 | 10
01/01/12 | Item 2 | 15
03/01/12 | Item 1 | 5
  1. 日付にギャップを残さないように、2 つのテーブルを結合する必要があります。OUTER JOIN でうまくいきました。

  2. その日付が表2にない場合、利用可能な最後の番号が必要です。例

02/01/12 | Item 1 | 10
02/01/12 | Item 2 | 15

私はこれに苦労しています。ヒントはありますか?

4

2 に答える 2

0

[Table1] があります。

Date      
----------
2013-01-01
2013-02-01
2013-03-01

[表2]

Date        Item    Qty
----------  ------  ---
2013-01-01  Item 1   10
2013-01-01  Item 2   15
2013-03-01  Item 1    5

Access で [DesiredRows] という名前の保存済みクエリを作成することから始めて、表示する日付/項目値の完全なセットを取得できます。

SELECT Table1.Date, i.Item
FROM
    Table1,
    (SELECT DISTINCT Item FROM Table2) AS i

...戻る

Date        Item  
----------  ------
2013-01-01  Item 1
2013-02-01  Item 1
2013-03-01  Item 1
2013-01-01  Item 2
2013-02-01  Item 2
2013-03-01  Item 2

[LastAvailableDates] という名前の保存されたクエリの一部としてそのクエリを使用して、これらのペアのそれぞれについて Table2 で利用可能な最後の日付を取得できます。

SELECT 
    DesiredRows.Date, 
    DesiredRows.Item, 
    MAX(Table2.Date) AS LastAvailableDate
FROM 
    DesiredRows 
    INNER JOIN 
    Table2 
        ON Table2.Item = DesiredRows.Item 
            AND Table2.Date <= DesiredRows.Date
GROUP BY DesiredRows.Date, DesiredRows.Item

...戻る

Date        Item    LastAvailableDate
----------  ------  -----------------
2013-01-01  Item 1  2013-01-01       
2013-01-01  Item 2  2013-01-01       
2013-02-01  Item 1  2013-01-01       
2013-02-01  Item 2  2013-01-01       
2013-03-01  Item 1  2013-03-01       
2013-03-01  Item 2  2013-01-01       

最後に、そのクエリをクエリで使用して、最終結果を取得できます

SELECT 
    LastAvailableDates.Date, 
    LastAvailableDates.Item, 
    Table2.Qty
FROM 
    LastAvailableDates 
    INNER JOIN 
    Table2 
        ON Table2.Date = LastAvailableDates.LastAvailableDate 
            AND Table2.Item = LastAvailableDates.Item

...戻る

Date        Item    Qty
----------  ------  ---
2013-01-01  Item 1   10
2013-01-01  Item 2   15
2013-02-01  Item 1   10
2013-02-01  Item 2   15
2013-03-01  Item 1    5
2013-03-01  Item 2   15
于 2013-10-18T18:12:10.980 に答える
0

クエリはデータを変換して結合できますが、最初から存在しなかった新しいデータ (行) を生成することはできません。あなたの場合、2012 年 2 月 1 日のデータ行が欠落している場合、その場で行を作成してクエリ結果のギャップを埋めることはできません。

修正するには、結果に必要なルックアップ日付セグメントをすべて含む 3 番目のテーブルまたはサブクエリを作成し、それを外部クエリの外部結合に含めます。

于 2013-10-18T17:33:05.913 に答える