2016-11-02 3 views
0

가능하면 단일 쿼리를 사용하여 통합하려는 다른 두 데이터베이스의 두 테이블 (동일한 구조)이 있습니다.두 테이블을 통합하는 쿼리 도움말

모든 일련 번호와 항목 이름, 두 개의 카테고리 식별자를 가져 오려고합니다. 일련 번호는 4 개의 필드에 저장됩니다. 다른 문제는 이름과 카테고리 필드가 항상 두 테이블간에 동일하지 않을 것이라는 것입니다 (그래도해야하지만 -이 모든 것이 또 다른 문제입니다). 그래서, 첫 번째 테이블에서 별개의 SN과 이름 및 고양이 필드를 반환하는 쿼리를 원합니다. 내가 직접 Excel에서 통합을 완료하고 필요한 보고서에 데이터를 공급 것 거기에서

SELECT 
LEFT(NUMBR_1,4) + '-' + LEFT(NUMBR_2,4) + '-' + LEFT(NUMBR_3,3) + '-' + LEFT(NUMBR_4,5) AS SN 
,DESCR 
,TYP 
,ATNUM 
FROM DB1.dbo.table1 
UNION 
SELECT 
LEFT(NUMBR_1,4) + '-' + LEFT(NUMBR_2,4) + '-' + LEFT(NUMBR_3,3) + '-' + LEFT(NUMBR_4,5) AS SN 
,DESCR 
,TYP 
,ATNUM 
FROM DB2.dbo.table2 

:와

그래서 나는 시작했다. SQL을 사용하여 최종 결과를 얻으려고했지만, 그렇게하는 것은 내 기술 세트를 벗어났습니다.

위의 쿼리를 다른 선택으로 감싸서 SN별로 구분하거나 그룹화하여 SN의 최종 통합 목록을 얻습니다. 그러나 이러한 값 자체가 첫 번째 테이블의 다른 필드를 쿼리하는 데 사용할 수있는 것이 아니기 때문에 (적어도 알아낼 수는 있지만) 어떻게 진행해야할지 확신 할 수 없었습니다. 어떤 도움을 주시면 감사하겠습니다. 감사.

+0

당신이'table' 스크립트와 일부 더미 데이터를 만들어 제공 할 수 있습니다를 요구 사항을 설명하고 작업 할 수있는 자료를 제공하려면 원하는 결과물을 얻으십시오. – iamdave

+0

@Jason Kimbel 내부 쿼리에서 외부 쿼리의 필드에 액세스 할 수 없다는 것을 의미합니까? –

답변

0
SELECT 
    LEFT(NUMBR_1,4) + '-' + LEFT(NUMBR_2,4) + '-' + LEFT(NUMBR_3,3) + '-' + LEFT(NUMBR_4,5) AS SN, 
    ,coalesce(t1.DESCR, t2.DESCR) DESCR, 
    ,coalesce(t1.TYP, t2.TYP) TYP 
    ,coalesce(t1.ATNUM, t2.ATNUM) ATNUM 
FROM DB1.dbo.table1 t1 
FULL JOIN DB2.dbo.table2 t2 ON 
    t1.NUMBR_1 = t2.NUMBR_1 AND t1.NUMBR_2 = t2.NUMBR_2 AND t1.NUMBR_3 = t2.NUMBR_3 AND t1.NUMBR_4 = t2.NUMBR_4 
+0

고마워요! 그것은 트릭을했다. SN에 대해서도 병합을 사용해야했습니다. –

0

나를 실제로 때리는 요엘에 대한 비슷한 대답입니다.하지만 실제로 실행됩니다. 테이블 이름으로 @t1@t2을 교환하십시오. FULL JOIN의 두 테이블에서 모든 레코드를 반환하고, 일치가없는 경우, NULL 한 측의 다른에 대한 타의 추종을 불허하는 값을 반환

declare @t1 table (numbr_1 int 
        ,numbr_2 int 
        ,numbr_3 int 
        ,numbr_4 int 
        ,descr nvarchar(50) 
        ,typ nvarchar(50) 
        ,atnum int 
        ); 

declare @t2 table (numbr_1 int 
        ,numbr_2 int 
        ,numbr_3 int 
        ,numbr_4 int 
        ,descr nvarchar(50) 
        ,typ nvarchar(50) 
        ,atnum int 
        ); 

insert into @t1 values 
(1,1,1,1,'d1','t1',1) 
,(1,1,1,2,'d2','t1',1) 
,(1,1,1,3,'d3','t2',2) 
,(1,1,2,1,'d4','t2',3) 
,(1,1,2,2,'d5','t2',4); 

insert into @t2 values 
(1,1,1,1,'d6','t1',1) 
,(1,1,1,2,'d7','t3',1) 
,(1,2,1,3,'d8','t4',2) 
,(1,2,2,1,'d9','t4',3) 
,(1,2,2,2,'d5','t2',4); 

select coalesce(left(t1.numbr_1,4) + '-' + left(t1.numbr_2,4) + '-' + left(t1.numbr_3,4) + '-' + left(t1.numbr_4,4) 
       ,left(t2.numbr_1,4) + '-' + left(t2.numbr_2,4) + '-' + left(t2.numbr_3,4) + '-' + left(t2.numbr_4,4) 
       ) as ID 
     ,coalesce(t1.descr,t2.descr) as descr 
     ,coalesce(t1.typ,t2.typ) as typ 
     ,coalesce(t1.atnum,t2.atnum) as atnum 
from @t1 t1 
    full join @t2 t2 
     on(t1.numbr_1 = t2.numbr_1 
      and t1.numbr_2 = t2.numbr_2 
      and t1.numbr_3 = t2.numbr_3 
      and t1.numbr_4 = t2.numbr_4 
      );