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. 我必须加入这两个表,而不是在日期上留下空白:一个 OUTER JOIN 就可以了。

  2. 如果表 2 中缺少该日期,我希望获得最后一个可用号码。例如

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

我正在为此苦苦挣扎。有什么提示吗?

4

2 回答 2

0

查询可以转换和连接数据,但不能生成一开始就不存在的新数据(行)。在您的情况下,如果缺少 02/01/12 数据行,您将无法动态创建行来填补查询结果中的空白。

要解决此问题,请创建第三个表或子查询,其中包含您在结果中需要的所有查找日期段,并将其包含在外部查询的外部联接中。

于 2013-10-18T17:33:05.913 回答
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 回答