2011-10-21 2 views
6

편집 : COALESCE 방법을 시도한 후에 데이터가 각 와트 범주에 대해 동일한 데이터로 반복되는 문제가 나타납니다. 열 2는 와트입니다. enter image description here다른 데이터가있는 두 개의 동일한 테이블 구조를 결합하십시오.

동일한 테이블 구조로 두 개의 임시 테이블을 만들었습니다. 이 테이블에는 동일한 값을 가질 수있는 여러 개의 열이 있고 서로 다른 숫자를 갖는 몇 개의 값 열이 있습니다. 이들 중 일부는 한 열에서 NULL이되고 다른 열에서는 NULL이 아닙니다. 나는 모든 가치를 모으고 싶다. 그리고 동일한 사이트와 공장을 가지고있는 행에 가치들을 결합하고 싶다.

SITE  PLANT   VALUE_1   VALUE 2 
S1  P1    54    66 
S1  P2    43    43 

표 2 :

SITE  PLANT   VALUE_1   VALUE_2 
S1  P1   33    43 
S2  P1   34    22 

결과 : 여기

은 두 테이블의 모습 수 있으며, 결과는 내가

TABLE1 기대하는 무엇의 예입니다

SITE  PLANT   t1_VALUE_1 t1_VALUE_2 t2_VALUE_1  t2_VALUE2 
S1  P1   54   66   33    43 
S1  P2   43   43   NULL   NULL 
S2  P1   NULL   NULL   34    22 

내 원본 생각은 완전한 참여가 될 것입니다. 그러나 select 문에서 site 및 plant와 같은 열을 가져올 위치를 지정해야하기 때문에이 방법은 작동하지 않습니다. t1.site와 t2.site를 모두 선택하면 두 개의 열이 생성됩니다. 내가 얻은 가장 가까운 것은 아래의 쿼리 였지만 언제든지 S1에없는 사이트와 플랜트가있는 S2의 결과가있을 때 S1과 S2의 Null 값을 받게됩니다.

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site 
AND t1.plant = t2.plant 
+0

HTML 마크 업을 사용하지 마십시오. 공백이있는 테이블을 붙여 넣으려면 "코드 형식"아이콘을 사용하십시오. –

+0

@Tom - S1과 S2는 열이나 테이블로 나열되지 않습니다. 너는 실제로 무엇을 말하는거야? –

답변

1

coalesce을 사용할 수 있습니다. 매개 변수에서 첫 번째 Null이 아닌 값을 반환합니다.

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

두 가지 트릭이이 쿼리를 완료하는 데 필요합니다. 첫 번째는 FULL JOIN입니다. 전체 조인을 사용하면 두 테이블을 결합 할 수 있으며 조인 조건과 일치하지 않을 때 두 테이블에 널을 삽입 할 수 있습니다. 두 번째는 COALESCE이며, 결과에서이 행에 대한 레코드를 제공하는 테이블 중 하나에서 플랜트 및 사이트를 가져올 수 있습니다.

SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant, 
    t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2, 
    t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2 
FROM Table1 t1 
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant 
+0

입력 해 주셔서 고맙습니다. 병합 함수에서 똑똑한 의견을 제시해야합니다. 업데이트 된 질문을 참조하십시오. – Tom

관련 문제