2017-03-06 6 views
0

4 개의 테이블을 조인 할 때 결과 내에서 데이터가 들어오는 테이블을 식별해야합니다. 왼쪽 외부 조인을 사용하여 Tbl1에 Tbl2에 가입합니다. 나는 왼쪽 외부 조인을 사용하여 Tbl1에 Tbl1을 가입시키고 Tbl1과 Tbl4에 동일한 것으로 가입합니다. SerialNo는 모든 테이블을 조인하는 주요 필드입니다. 결과는 데이터가 어떤 테이블에서 왔는지 나타낼 필요가 있습니다. 테이블간에 결과를 일치 시키려면 올바른 테이블을 식별해야합니다. 예를 들어 샘플 테이블에서 SerialNo가 ABC123, DEF987 및 HJK321 인 레코드에 대해 Tbl2가 결과에 있음을 보여주고 싶습니다.여러 SQL Server 조인의 결과에 상수 추가

데이터베이스에서 데이터를 추출하는 방법 때문에 저장된 프로 시저를 시작할 수 없으므로 프로세스에서 임시 테이블을 활용할 수 없다면 데이터를 가져올보기가 필요합니다. 나는 결과에보고 싶은 무엇

Tbl1 
*Hostname* | *SerialNo* 
Laptop1  | ABC123 
Laptop2  | DEF987 
Desktop1 | WER987 
Desktop2 | YRT848 
Desktop3 | YTT876 
Laptop2  | HJK321 

Tbl2 
*Location* | *SerialNo* 
MS  | ABC123 
CO  | DEF987 
CA  | ZYC342 
AZ  | XYZ789 
IN  | HJK321 

...

Result1 
*Hostname* | *SerialNo* |*Location* |*RecordOrigin* 
Laptop1  | ABC123  |MS   |Tbl2 
Laptop2  | DEF987  |CO   |Tbl2 
Desktop1 | WER987  |NULL  |Tbl1 
Desktop2 | YRT848  |NULL  |Tbl1 
Desktop3 | YTT876  |NULL  |Tbl1 
Laptop2  | HJK321  |IN   |Tbl2 
내가 RecordOrigin 정보를 추가로 테이블을 생성했지만, 내가 제대로 다른 테이블에 가입 할 수 없습니다

.

원본 테이블 테이블 (예 : Tbl1, Tbl2 등)에서 데이터를 편집하거나 구조를 변경할 수 없다는 점도 유의해야합니다.

select 
    t.Hostname 
    , t.SerialNo 
    , l.Location 
    , RecordOrigin = case 
     when l.SerialNo is not null 
     then 'Tbl2' 
     else 'Tbl1' 
     end 
from Tbl1 as t 
    left join Tbl2 as l 
    on t.SerialNo = l.SerialNo 

답변

0

은 당신과 같이 테이블에 열을 반환 있는지 확인하기 위해 case 표현을 사용하거나 수 없습니다 복사.

SELECT DISTINCT Hostname, MAX(SerialNo), MAX(Location), RecordOrigin 
FROM 
(
SELECT Hostname, SerialNo, Location, 'Tbl1' AS RecordOrigin 
FROM Tbl1 

UNION 

SELECT Hostname, SerialNo, Location, 'Tbl2' AS RecordOrigin 
FROM Tbl1 
) 
GROUP BY Hostname, RecordOrigin 
0

을 내가 UNION하여 테이블을 알아 낸 수 있으며 DISTINCT와 MAX 사용하여 제거 할 생각 :