2013-05-25 2 views
0

두 쿼리의 열을 다음과 같이 결합하려고합니다. Access 솔루션을 찾고 있습니다.MS Access Join Query

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

하지만이 원치 않는 출력을 받고 있어요 : 나는 내 노력

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 

가입

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

fthiella가 실제로 이것을 대답했지만 MySQL을 데이터베이스로 사용했습니다. [link] (http://sqlfiddle.com/#!2/858b5/2) Access에서 실제 필드와 함께 사용하려고했지만 실행되지 않습니다. – matley

답변

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 서버와 같은 다른 데이터베이스에 훨씬 쉽습니다.

또한이 버전은 두 열에 중복 된 값이 없다고 가정합니다. 중복을 사용하면 각 행을 고유하게 식별 할 수있는 다른 열 (예 : ID 또는 생성 날짜)이 필요합니다.

+0

고든에게 감사하지만 q2.col2에 매개 변수 값을 입력하라는 메시지가 표시됩니다. 또한 내 질문을 편집하려면 ON Query2.col1 = Query1.colA ON Query2.colA = Query1.col1 바꾸려면 노력하고있어하지만 할 수 없습니다. – matley

+0

나는 colA, colB, col1 및 col2를 테이블 사이에 거꾸로 가지고 있다고 생각한다. –

+0

그에 따라 쿼리를 조정하지만 여전히 매개 변수를 묻습니다. Access에서 작동 할 예정입니까? – matley