0

次のように 2 つのクエリの列を結合しようとしています。 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 

ありがとう!

4

1 に答える 1

0

2 つの列のランクを結合しているため、これは Access では非常に難しい問題です。特に効率的ではありませんが、以下に 1 つの方法を示します。

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 などの他のデータベースでははるかに簡単です。

また、このバージョンは、2 つの列に重複する値がないことを前提として機能します。重複がある場合、各行を一意に識別するために他の列が必要になります (たとえば、ID または作成日)。

于 2013-05-25T13:53:33.453 に答える