MS Access加入查询

时间:2013-05-25 13:35:29

标签: sql ms-access

我正在尝试将两个查询的列组合如下: 我正在寻找一种Access解决方案。

Query1:                 Query2:
-------------           -------------
Col1   Col2             ColA   ColB
-------------           -------------
314      2              314     1
314      3              314     7
314      4              314     3
314      5              314     8

Desired Output:
Col1   Col2   ColB
314      5      8
314      4      7
314      3      3
314      2      1

我尝试了内连接:

SELECT Query1.col1, Query1.col2, Query2.colB
FROM Query2 INNER JOIN Query1 ON Query2.colA = Query1.col1;

但是我得到了这个不受欢迎的输出:

Undesired output:
Col1 Col2 ColB
314   4 1
314   5 1
314   2 1
314   3 1
314   4 7
314   5 7
314   2 7
314   3 7
314   4 3
314   5 3
314   2 3
314   3 3
314   4 8
314   5 8
314   2 8
314   3 8 

谢谢!

1 个答案:

答案 0 :(得分:0)

这是Access中的一个非常难的问题,因为您正在加入两列的行列。这是一种方法,虽然效率不高:

SELECT Query1.col1, Query1.col2, Query2.colB
FROM (select q.*,
             (select count(*)
              from query1 as q2
              where q2.col2 >= q.col2 and q2.col1 = q.col1
             ) as seqnum
      from Query1 as q
     ) as query1 INNER JOIN
     (select q.*,
             (select count(*)
              from query2 as q1
              where q1.colB >= q.colB and q1.colA = q.colA
             ) as seqnum
      from Query2 as q
     ) as Query2
    ON Query2.col1 = Query1.colA and
       Query2.seqnum = Query1.seqnum;

此构造在其他数据库中更容易,例如可以使用row_number()函数的SQL Server。

此外,假设您在两列中没有重复值,此版本可以正常工作。对于重复项,您需要一些其他列来唯一标识每一行(例如,id或创建日期)。