情形:
表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
我必须加入这两个表,而不是在日期中留下空白: 一个OUTER JOIN就是这个伎俩。
如果表2中缺少该日期,我想拥有最后一个可用的号码。 例如。
02/01/12 | Item 1 | 10
02/01/12 | Item 2 | 15
我正在努力解决这个问题。任何提示?
答案 0 :(得分:0)
查询可以转换和连接数据,但它不能生成那些不存在的新数据(行)。在您的情况下,如果缺少02/01/12数据行,您将无法动态创建行以填补查询结果中的空白。
要修复,请创建包含结果中所需的所有查找日期段的第3个表或子查询,并将其包含在外部查询的外部联接中。
答案 1 :(得分:0)
好的,我们有[表1]
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]的已保存查询的一部分,以便为表格2中的每一对提供最后一个可用日期
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