加入两个表,表示Access中随时间的变化

时间:2017-07-24 03:10:33

标签: sql ms-access join

我正在使用Access,我正在尝试连接两个具有以下结构的表:

表1:

Col1   Col2   T1
C      A      1.1
B      A      1.2
D      A      1.3

表2:

Col1   Col2   T2
C      A      2.1
B      A      2.2
E      A      2.3

我希望结果表如下表所示:

Col1   Col2   T1    T2
C      A      1.1   2.1
B      A      1.2   2.2
D      A      1.3   0
E      A      0     2.3

我从互联网(外部联接)尝试了很多解决方案,但我没有得到所需的结果!如果有人可以帮我解决这个问题,我真的很感激!!!

2 个答案:

答案 0 :(得分:1)

不幸的是,Access不支持FULL OUTER加入。您需要执行两个连接,然后将表联合起来。

这将使您的表格无特定顺序。如果字段为NULL,则NZ(T1,0)将0替换为T1。

SELECT    Table1.Col1
        , Table1.Col2
        , NZ(T1,0)
        , NZ(T2,0)
FROM    Table1 LEFT JOIN Table2 ON Table1.Col1 = Table2.Col1 AND Table1.Col2 = Table2.Col2

UNION SELECT    Table2.Col1
        , Table2.Col2
        , NZ(T1,0)
        , NZ(T2,0)
FROM    Table2 LEFT JOIN Table1 ON Table2.Col1 = Table1.Col1 AND Table2.Col2 = Table1.Col2

要在最终查询中获得所需的确切字段名称,您必须将查询包装在另一个查询中 - 您不能使用调用NZ(T1,0) AS T1,因为您将获得循环引用警告。

SELECT  Col1, Col2, T1Col AS T1, T2Col AS T2
FROM        (
            SELECT    Table1.Col1
                    , Table1.Col2
                    , NZ(T1,0) AS T1Col
                    , NZ(T2,0) AS T2Col
            FROM    Table1 LEFT JOIN Table2 ON Table1.Col1 = Table2.Col1 AND Table1.Col2 = Table2.Col2

            UNION SELECT    Table2.Col1
                    , Table2.Col2
                    , NZ(T1,0)
                    , NZ(T2,0)
            FROM    Table2 LEFT JOIN Table1 ON Table2.Col1 = Table1.Col1 AND Table2.Col2 = Table1.Col2
            )  

我不知道如何获得你所追求的排序顺序。

答案 1 :(得分:0)

SELECT COALESCE(A.Col1,B.Col1 ) AS Col1,
       COALESCE(A.Col2,B.Col2 ) AS Col2,
       COALESCE(A.T1,0) AS T1,
       COALESCE(B.T2,0) AS T2
  FROM TABLE1 A
FULL OUTER JOIN
       TABLE2 B
    ON A.Col1 = B.Col1;