【问题标题】:SQL Combine two tables with two parametersSQL 将两个表与两个参数结合起来
【发布时间】:2026-02-11 22:40:01
【问题描述】:

我在论坛上搜索了 1 小时,没有找到类似的东西。

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

表1

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 

我尝试加入和阅读论坛,但没有找到解决方案。

【问题讨论】:

    标签: sql ms-access multiple-conditions


    【解决方案1】:

    你在找这个吗?

    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
    

    输出:

    |身份证 |日期 | STATE_ON_DATE |年_数量 | |----|------------|---------------|--------------- | | 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 Access 中应该可以正常工作。

    【讨论】:

    • 在给出错误的别名之前是AS。 MS Access 不喜欢没有AS 的列别名,这与 MySQL 或 SQL Server 不同。应该是AS year_quantity。请参阅更新的答案。它已经过测试并且工作正常。
    • 它确实很好用。非常非常感谢你。我对此表还有其他问题,我可以在这里问还是我必须添加另一个问题?我想添加第 5 行来跟踪第 3 行的更改。在第 5 行,我想从上到下有差异|23|-2(23-25)|-10(25-35)|23(35-12)|34|34-65|65-43 它是全部基于 ID 和日期。感谢您的所有帮助,我真的很感激。