2011-09-08 4 views
2

두 SQL 테이블을 조인해야하는 시나리오가 있으며이를 수행하는 데 어려움이 있습니다. T-SQL : 여분의 행을 만들지 않고 테이블을 조인하는 방법 - 하나의 행을 하나의 행으로 연결해야합니다.

ColA ColB ColC ColD 
45  55  17  45 
45  55  17  47 
45  55  17  49 
45  55  17  51 

그리고 표 BI에서

이 있습니다 : 의 테이블 AI에 있다고 가정 해 봅시다이 있습니다

나는이처럼 보이는 테이블을 만들 필요가
ColA ColB ColC ColE 
45  55  17  55 
45  55  17  56 
45  55  17  57 
45  55  17  58 

- 만 4 개 행이 아닌 16주의 내가 사용하고 있던 내부 조인이 생성됩니다.

ColA ColB ColC ColD ColE 
45  55  17  45  55 
45  55  17  47  56 
45  55  17  49  57 
45  55  17  51  58 

저는 많은 아이디어가 있습니다. 두 테이블 모두 항상 같은 수의 행을가집니다. 조인을 사용하여이 작업을 수행 할 수있는 방법이 있습니까? 아니면 테이블 A를 반복하여 (즉 행 번호를 가져와) 표 B에서 일치하는 행 번호를 가져야합니까?

모든 의견을 크게 기뻐할 것입니다.

+1

에서. 또한 ROW_NUMBER을 살펴보십시오. http://msdn.microsoft.com/en-us/library/ms186734.aspx –

+0

SQL 2008 R2 – 68CamaroGuy

답변

5

가정의 SQL Server 버전이 사용하고 어떻게이 일치하는 순서를 결정합니까 적어도 SQL Server 2005의

WITH T1 
    AS (SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColD) 
       RN 
     FROM TableA), 
    T2 
    AS (SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColE) 
       RN 
     FROM TableB) 
SELECT T1.ColA, 
     T1.ColB, 
     T1.ColC, 
     T1.ColD, 
     T2.ColE 
FROM T1 
     JOIN T2 
     ON T1.ColA = T2.ColA 
      AND T1.ColB = T2.ColB 
      AND T1.ColC = T2.ColC 
      AND T1.RN = T2.RN 
+0

에 대한 글입니다. 그래, 나도 권하고 싶습니다. –

+0

이 솔루션은 제가 찾고 있던 것을 정확히 보여주었습니다 !! 고마워요, 여러분들은 훌륭합니다! – 68CamaroGuy

관련 문제