2014-01-07 55 views
-1

我搜索论坛1小时,没有发现任何相似之处。SQL将两个表与两个参数结合

我有这个问题:我想比较两个colums ID和DATE,如果它们在两个表中都相同,我想将表2中的数字放在它旁边。但如果不一样,我想在日期填写每年的配额。我在Access工作。

table1的

id|date|state_on_date 
1|30.12.2013|23 
1|31.12.2013|25 
1|1.1.2014|35 
1|2.1.2014|12 
2|30.12.2013|34 
2|31.12.2013|65 
2|1.1.2014|43 

表2

id|date|year_quantity 
1|31.12.2013|100 
1|31.12.2014|150 
2|31.12.2013|200 
2|31.12.2014|300 

我想:

表3

id|date|state_on_date|year_quantity 
1|30.12.2013|23|100 
1|31.12.2013|25|100 
1|1.1.2014|35|150 
1|2.1.2014|12|150 
2|30.12.2013|34|200 
2|31.12.2013|65|200 
2|1.1.2014|43|300 

我尝试连接和阅读论坛,但没有找到解决办法。

回答

0

您是否正在寻找?

SELECT id, date, state_on_date, 
(
    SELECT TOP 1 year_quantity 
    FROM table2 
    WHERE id = t.id 
    AND date >= t.date 
    ORDER BY date 
) AS year_quantity 
    FROM table1 t 

输出:

 
| ID |  DATE | STATE_ON_DATE | YEAR_QUANTITY | 
|----|------------|---------------|---------------| 
| 1 | 2013-12-30 |   23 |   100 | 
| 1 | 2013-12-31 |   25 |   100 | 
| 1 | 2014-01-01 |   35 |   150 | 
| 1 | 2014-01-02 |   12 |   150 | 
| 2 | 2013-12-30 |   34 |   200 | 
| 2 | 2013-12-31 |   65 |   200 | 
| 2 | 2014-01-01 |   43 |   300 | 

这里是SQLFiddle演示它是SQL Server,但应在MS Accesss工作得很好。

+0

我试过但我得到错误。 :( http://postimg.org/image/q4671b7oz/ – Chaler

+0

它是在提供错误的别名之前的'AS'.MS Access不喜欢没有'AS'的列别名,它不像MySQL或SQL Server,它应该是' AS year_quantity'。查看更新后的答案,已经过测试并且工作正常。 – peterm

+0

它的功能非常好。非常感谢。我对此表有额外的问题,我可以在这里问一下我需要添加另一个吗?我想添加第5行来跟踪第3行的变化,在第5行我希望从上到下DIFFERENCE | 23 | -2(23-25)| -10(25-35)| 23(35- 12)| 34 | 34-65 | 65-43这一切都基于ID和日期。 – Chaler